有没有办法知道Makefile
是否使用--dry-run
选项调用GNU make?
我正在寻找类似的东西:
ifeq (dry-run)
; # do not create a rule
else
; # create a custom rule
endif
这也可以是任何其他解决方法。
原因是我引用了依赖Makefile
目标的其他.PHONY
的规则,因此干运行显示所有目标,而不仅仅是过时的目标。
答案 0 :(得分:5)
您可以检查MAKEFLAGS
的值以查看设置了哪些标志。如果存在-n
选项,则表示make正在以空运行模式运行(MAKEFLAGS
始终包含短单字符选项(如果存在),无论在命令行上指定了哪个选项。
这样的事情:
ifeq (n,$(findstring n,$(firstword -$(MAKEFLAGS))))
# run with -n / --dry-run
else
# not run with -n / --dry-run
endif
答案 1 :(得分:2)
基于@madscientist响应,如果您想要执行的命令也支持-n
开关(例如rsync
),您可以像这样短路命令:
_n := $(findstring -n,$(firstword -$(MAKEFLAGS)))
foo:
rsync $(_n) ...