观察make noisy
和noisy:
@make foo
silent:
@make -s foo
foo:
@make -s bar
bar:
@echo bar
之间的区别。我要求make对条形规则保持沉默,但它也只是在foo规则上保持沉默。
我错过了什么?
$ 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
我期待var a = 12;
function run() {
var a = 34;
alert(window.a);
/*accesses the global window object to which any variable
in the global scope gets binded*/
}
run();
foo - > bar call to not print"输入目录"
答案 0 :(得分:1)
如果您展示了所看到的输出并准确解释了您认为哪些方面是错误的,那将会很有帮助。你的陈述也只是对foo规则保持沉默,也难以理解/理解。所以,我真的不知道你试图解决的问题是什么。
但是,我会说-s
仅对没有@
前缀的配方行产生影响。如果配方行以@
为前缀,则无论您是否指定-s
,都不会打印。由于您的所有食谱行都以@
作为前缀,因此使用-s
或不会使用{<1}}。
也许这会帮助你理解你所看到的。
另外,仅供参考,在递归调用make时,不应使用文字make
。请始终使用$(MAKE)
变量。
答案 1 :(得分:0)
使用MAKEFLAGS环境变量将选项从父make传递给sub-make,sub-make添加了它收到的命令行标志。如果子品牌未收到-s
(--silent
),-w
(--print-directory
)或--no-print-directory
,则automatically将-w
添加到自己的MAKEFLAGS中。启用和禁用目录打印的优先顺序似乎是(从最弱到最强)-s
,-w
,--no-print-directory
。
因此,当您运行make silent
时,第一个递归调用将-s
添加到MAKEFLAGS,第二个调用知道不触摸标志。但是,当您运行make noisy
时,第一次递归调用会向MAKEFLAGS添加-w
,因为您没有告诉它不要保持沉默,从那时起,-s
赢了&#39 ; t具有你正在寻找的效果。您可以改为使用--no-print-directory
,因为它会覆盖-w
。