在Makefile中,知道GNU make是否在--dry-run中?

时间:2016-12-23 13:34:36

标签: gnu-make

有没有办法知道Makefile是否使用--dry-run选项调用GNU make?

我正在寻找类似的东西:

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

这也可以是任何其他解决方法。

原因是我引用了依赖Makefile目标的其他.PHONY的规则,因此干运行显示所有目标,而不仅仅是过时的目标。

2 个答案:

答案 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)  ...