2015-08-09 3 views
0

docs обеспечивает:.EXPORT_ALL_VARIABLES работает только тогда, когда сделал «фальшивый»

«.EXPORT_ALL_VARIABLES»

Просто упоминается как цель, это говорит „сделать“ экспортировать все переменные для ребенка по умолчанию. * Примечание. Коммуникация Переменные для подзаголовка: переменные/рекурсия.

Однако следующая Makefiles показывает, что только путем .EXPORT_ALL_VARIABLES мишень фальшивого, тогда и только то, будет ли он иметь желаемый эффект на Makefile, т.е. экспортировать все переменные.

Makefile (версия 1) является:

ifeq "$(MAKELEVEL)" "0" 

foo=bar 

.DEFAULT:; 

all: .EXPORT_ALL_VARIABLES 
    @$(MAKE) 

else 

all: 
    @echo 'foo is: $(foo)' 

endif 

Бег, мы получаем:

make[1]: Entering directory '/home/myname' 
foo is: 
make[1]: Leaving directory '/home/myname' 

Makefile (версия 2) является:

ifeq "$(MAKELEVEL)" "0" 

foo=bar 

.DEFAULT:; 

all: .EXPORT_ALL_VARIABLES 
    @$(MAKE) 

# This line is added in THIS version. 
.PHONY: .EXPORT_ALL_VARIABLES 

else 

all: 
    @echo 'foo is: $(foo)' 

endif 

Running, мы получаем:

make[1]: Entering directory '/home/myname' 
foo is: bar 
make[1]: Leaving directory '/home/myname' 

Теперь единственная разница между этими двумя версиями makefile заключается в том, что во 2-й версии .EXPORT_ALL_VARIABLES был сделан фальшивым.

Почему «фоны» необходимы для работы?

ответ

1

Просто упоминается в качестве мишени,

Почему «фальшь» необходимо для того, чтобы работать?

Это не так. Вы не объявлял .EXPORT_ALL_VARIABLES как цель, вы объявили его в качестве предварительного условия:

all: .EXPORT_ALL_VARIABLES 

Это необходимое условие, а не цель. Если вы заявляете его в качестве цели:

.EXPORT_ALL_VARIABLES: 

затем он будет работать, и вам не придется объявлять его фальшивым.

Более точный вопрос будет, почему объявление .EXPORT_ALL_VARIABLES как фальшивой работы, даже если оно не объявлено как цель? Это происходит потому, что вещи, обозначенные фальшивыми, считаются мишенями, даже если они явно не упоминаются как таковые. Это может быть или не быть ошибкой, в зависимости от того, как вы интерпретируете намерение .PHONY.

Ваши вопросы в последнее время, похоже, следуют шаблону: прочитайте документацию, затем напишите файл makefile, который делает что-то похожее, но не то же самое, что говорит документация, наблюдайте, как он не работает, как описано, а затем спросите, почему нет.

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