观察make silent与make noisy的差异。我要求make对酒吧规则保持沉默,但它也只对foo规则保持沉默。
我遗漏了什么?
noisy:
@make foo
silent:
@make -s foo
foo:
@make -s bar
bar:
@echo bar运行它:
$ make silent
bar
$ make noisy
make[1]: Entering directory `/tmp/s'
make[2]: Entering directory `/tmp/s'
bar
make[2]: Leaving directory `/tmp/s'
make[1]: Leaving directory `/tmp/s'我希望noisy foo -> bar调用不会打印“输入目录”。
发布于 2016-05-31 07:17:32
选项是使用马奎斯环境变量从父make传递到子make的,子make将接收到的命令行标志添加到该变量。如果子产品没有收到-s (--silent)、-w (--print-directory)或--no-print-directory,则自动将-w添加到自己的MAKEFLAGS中。启用和禁用目录打印的优先级顺序似乎是(从最弱到最强) -s、-w、--no-print-directory。
因此,当您运行make silent时,第一个递归调用将-s添加到MAKEFLAGS,而第二个调用知道不触及标志。但是,当您运行make noisy时,第一个递归调用将-w添加到MAKEFLAGS,因为您没有告诉它不要沉默,而且从那时起,-s将不会产生您想要的效果。您可以使用--no-print-directory代替,因为它会覆盖-w。
发布于 2016-05-28 20:07:02
如果您展示了所看到的输出,并准确地解释了您认为哪些方面是错误的,这将是有帮助的。此外,你的声明,但它只是沉默的foo规则,也是很难解释/理解。所以,我不知道你想要解决的问题是什么。
但是,我要说的是,-s只对没有以@作为前缀的菜谱行产生影响。如果菜谱行以@作为前缀,那么无论您是否指定-s,它都不会被打印。因为您所有的菜谱行都以@为前缀,所以使用-s或不使用将没有任何区别。
也许这会帮助你理解你所看到的。
另外,在递归调用make时,您不应该使用文本make。请始终使用$(MAKE)变量。
https://stackoverflow.com/questions/37502435
复制相似问题