2016-08-10 3 views
0

Я пытаюсь получить необязательную зависимость в GNU make. Я пытался использовать $ (подстановочные), но я получаю не-ожидаемый результат:Дополнительная зависимость в make-файле

test.mk:

a: 
     @echo "a" 
b: $(wildcard a) 
     @echo "b" 
     @touch a 

ожидается выход:

$ make -f ./test.mk b 
b 
$ make -f ./test.mk b 
a 
b 

фактический выход:

$ make -f ./test.mk b 
b 
$ make -f ./test.mk b 
b 

Что мне не хватает в $ (wildcard)?

+0

является 'a' файлом? Подстановочный знак используется для шаблонов, таких как '* .c' правильно? –

+0

Да, «a» - это файл, а $ (подстановочный знак) - это функция GNU make. – mathieu

+0

http://stackoverflow.com/questions/8175653/marking-a-makefile-dependency-as-optional-or-otherwise-unimportant –

ответ

1

Вы ничего не прокомментировали $(wildcard ...). Это просто, что файл a уже существует, когда вы запускаете make b во второй раз, поэтому make не нужно это делать и поэтому не будет запускать свой рецепт.

Если добавить:

.PHONY: a 

в Makefile, то целевой a будет, в случае необходимости, независимо от наличия такого файла и дать поведение, которое вы ожидаете, но это не ясно, от вашего если это действительно отразится на вашей цели.

+0

ах, что очевидно с ретроспективностью. Благодаря ! – mathieu

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