2016-12-23 2 views
2

Есть ли способ узнать в Makefile, был ли GNU make вызван с опцией --dry-run?В Makefile, знаете, если GNU make находится в режиме -dry-run?

Я ищу что-то вроде:

ifeq (dry-run) 
    ; # do not create a rule 
else 
    ; # create a custom rule 
endif 

Это также может быть любой другой обходной путь.

Причина в том, что я ссылаюсь на правила от другого Makefile, которые полагаются на цель .PHONY и, следовательно, с сухим пробегом отображает все цели и не только устаревшие.

ответ

4

Вы можете проверить значение MAKEFLAGS, чтобы увидеть, какие флаги установлены. Если присутствует опция -n, то вы знаете, что make работает в режиме сухого режима (MAKEFLAGS всегда содержит опцию короткого одиночного символа, если таковая существует, независимо от того, какая опция была указана в командной строке).

Что-то вроде этого:

ifeq (n,$(findstring n,$(firstword -$(MAKEFLAGS)))) 
    # run with -n/--dry-run 
else 
    # not run with -n/--dry-run 
endif 
2

на основе @madscientist réponse, если команда, которую вы хотите дополнительно выполнять также поддерживает также -n переключатель (например rsync), вы можете укоротить команду как это:

_n := $(findstring -n,$(firstword -$(MAKEFLAGS))) 

foo: 
    rsync $(_n) ... 
+1

Это не будет работать, потому что 'MAKEFLAGS' может легко содержать другие параметры перед' n'; в этом случае '-n' не будет найден. Вы можете сделать что-то вроде '_n: = $ (if $ (findstring n, $ (firstword - $ (MAKEFLAGS))), - n)' – MadScientist

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