2015-08-16 2 views
4

У меня есть следующие сделать файл:gnu make игнорировать .INCLUDE_DIRS?

$ cat foo.mk 
.INCLUDE_DIRS += .. 
$(info include_dirs is [${.INCLUDE_DIRS}]) 
include upper.mk 

В каталоге один уровень выше, у меня есть

$ cat ../upper.mk 
$(info HERE!!) 

Когда я бегу Makefile, я получаю:

$ make -f foo.mk 
include_dirs is [/usr/include /usr/local/include /usr/include ..] 
foo.mk:3: upper.mk: No such file or directory 
make: *** No rule to make target 'upper.mk'. Stop. 

также не эта работа, даже если я укажу абсолютный путь:

.INCLUDE_DIRS += /absolute/path/to/include/file 

Почему make не находит upper.mk, хотя я добавил каталог, в котором его можно найти (..), переменной .INCLUDE_DIRS?

Обратите внимание, что это делает работу:

$ make --include-dir=.. -f foo.mk 
include_dirs is [.. /usr/include /usr/local/include /usr/include] 
HERE!! 

Информация о версии:

$ make --version 
GNU Make 4.0 

ответ

3

К сожалению .INCLUDE_DIRS эффективно только для чтения: GNU Make создает значение для него, основываясь на списке по умолчанию каталоги поиска и любые добавления, которые вы указываете с помощью опции командной строки -I или --include-dir, но после этого GNU make ничего не делает с этой переменной.

Если вы хотите добавить .. в список поисковых каталогов для включаемых файлов Makefile, правильный способ сделать это, чтобы вызвать сделать как make -I ..

Смежные вопросы