Кажется, что CPPPATH не работает с scons?

читая справочную страницу scons, я понял, что scons не всегда понимает, когда изменяется заголовочный файл, исходные файлы cpp также должны меняться. Я провел эксперимент, но только для того, чтобы выяснить, определен ли у нас CPPPATH или нет, кажется, что scons всегда будет обнаруживать изменения в заголовочном файле и применяет пересборку соответствующих исходных файлов.

Например, у меня есть файл o.c и каталог headers /, содержащий файл n.h:

#include"headers/n.h"#include<stdio.h>
int main(){
printf("hello\n");
return 2;
}

И мои scons SConstruct таковы:

Program('o.c')

Когда я изменю содержимое n.h, scons перестроит файл o.c. Это довольно удивительно для меня. Я попытался изменить SConscript следующим образом:

Program('o.c',CPPPATH='.')

Надеюсь, на этот раз scons будет проверять только заголовочные файлы в «.», Но не в ./headers. Тем не менее, scons будет восстанавливать o.c

Я переместил заголовки / в другое место выше «.» каталог, и изменил o.c, чтобы включить его с абсолютным путем. Когда я изменяю n.h, все еще scons будет восстанавливать o.c

Мои вопросы:

(1) Как скан сканирует и определяет, изменился ли заголовочный файл, вызывает ли он gcc front-end или препроцессор для этого? Если так, то, похоже, дублируется работа с компиляцией, верно?

(2) Я не нахожу полезным указание CPPPATH: будут ли сканироваться сканоны. Даже когда я говорю CPPPATH = «.», Scons, кажется, сканирует другие каталоги.

Зачем? Это по замыслу? Если да, то как вообще используется CPPPATH?

0

Решение

Опять (см. При использовании команды «LIBS» в программе scons «Program» не удалось найти статическую библиотеку. Почему? а также Когда я изменяю файл SConstruct, scons не вызывает перестроение?Ваши предположения неверны.

SCons просто имитирует использование CPPPATH как в gcc/g++ компилятор. В вашем примере выше, даже gcc найдет заголовок n.h без явного-Iheaders«в командной строке.

#include"headers/n.h"

у него есть вся необходимая информация (полный относительный / абсолютный путь к заголовку). Сделать это

#include "n.h"

и вы увидите разницу.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]