首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Make:递归make忽略-s

Make:递归make忽略-s
EN

Stack Overflow用户
提问于 2016-05-28 18:22:26
回答 2查看 621关注 0票数 2

观察make silentmake noisy的差异。我要求make对酒吧规则保持沉默,但它也只对foo规则保持沉默。

我遗漏了什么?

代码语言:javascript
复制
noisy:
    @make foo

silent:
    @make -s foo

foo:
    @make -s bar

bar:
    @echo bar

运行它:

代码语言:javascript
复制
$ 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调用不会打印“输入目录”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2016-05-28 20:07:02

如果您展示了所看到的输出,并准确地解释了您认为哪些方面是错误的,这将是有帮助的。此外,你的声明,但它只是沉默的foo规则,也是很难解释/理解。所以,我不知道你想要解决的问题是什么。

但是,我要说的是,-s只对没有以@作为前缀的菜谱行产生影响。如果菜谱行以@作为前缀,那么无论您是否指定-s,它都不会被打印。因为您所有的菜谱行都以@为前缀,所以使用-s或不使用将没有任何区别。

也许这会帮助你理解你所看到的。

另外,在递归调用make时,您不应该使用文本make。请始终使用$(MAKE)变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37502435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档