如何在Makefile中指定--no-print-directory
问题描述:
我想运行我的makefile,而不用通过递归make调用打开-w标志。 执行该操作的标志是make命令行上的--no-print-directory。如何在Makefile中指定--no-print-directory
是否有可能在makefile中指定该标志本身?
我打算让这个标志依赖于冗余模式,或许有点像
$(if $(VERBOSE),,MAKEFLAGS += no-print-directory))
感谢, 丹
答
是的,只是附加--no-print-directory
到MAKEFLAGS
应该够了,但你要做到这一点与conditional directives,不与conditional functions:
ifndef VERBOSE
MAKEFLAGS += --no-print-directory
endif
答
您可以在调用生成文件的.SILENT:
特殊目标。例如,这里是你的顶层生成文件:
all:
$(MAKE) -f sub.mk foo
.SILENT:
和submake makefile文件,sub.mk:
foo:
@echo done
注意.SILENT
is considered obsolete,所以它可能不会是永远存在,并且也注意到,包括在您的生成文件也具有抑制命令回显的效果,就像您在makefile中的每个命令之前放置了@
一样。
请教育我,为什么? – dbbd
这是因为[变量赋值](http://www.gnu.org/software/make/manual/make.html#Setting)不能在扩展中发生,这又是由于[如何使解析makefile] (http://www.gnu.org/software/make/manual/make.html#Makefile-Contents)。将可变赋值(或其他类似规则定义)包含到可扩展代码('$(if ...)')中的唯一方法是['eval'](http://www.gnu.org/软件/ make/manual/make.html#Eval-Function)函数。但特别是对于你的情况,一个简单的条件指令是可以的,并且比'eval'更清晰。 –
噢,当然你可以像这样在变量赋值中嵌入一个条件函数:'MAKEFLAGS + = $(如果$(value VERBOSE),, - no-print-directory)''。这里的赋值是无条件地执行的,但是当'VERBOSE'没有被定义或者空时,实际上没有任何东西被附加到变量上。 –