2011-11-06 554 views
3

我想运行我的makefile,而不用通过递归make调用打开-w标志。 执行该操作的标志是make命令行上的--no-print-directory。如何在Makefile中指定--no-print-directory

是否有可能在makefile中指定该标志本身?

我打算让这个标志依赖于冗余模式,或许有点像

$(if $(VERBOSE),,MAKEFLAGS += no-print-directory)) 

感谢, 丹

回答

6

是的,只是附加--no-print-directoryMAKEFLAGS应该够了,但你要做到这一点与conditional directives,不与conditional functions

ifndef VERBOSE 
MAKEFLAGS += --no-print-directory 
endif 
+0

请教育我,为什么? – dbbd

+0

这是因为[变量赋值](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'更清晰。 –

+0

噢,当然你可以像这样在变量赋值中嵌入一个条件函数:'MAKEFLAGS + = $(如果$(value VERBOSE),, - no-print-directory)''。这里的赋值是无条件地执行的,但是当'VERBOSE'没有被定义或者空时,实际上没有任何东西被附加到变量上。 –

0

您可以在调用生成文件的.SILENT:特殊目标。例如,这里是你的顶层生成文件:

all: 
    $(MAKE) -f sub.mk foo 

.SILENT: 

和submake makefile文件,sub.mk:

foo: 
    @echo done 

注意.SILENT is considered obsolete,所以它可能不会是永远存在,并且也注意到,包括在您的生成文件具有抑制命令回显的效果,就像您在makefile中的每个命令之前放置了@一样。