$(Q)@:在Makefile中是什么意思

时间:2016-04-09 18:55:49

标签: makefile gnu-make

我在linux Makefile中读过:

$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
    $(Q)@:

“$(Q)@:”是什么意思?

我正在尝试谷歌,但谷歌总是蹩脚,如果搜索使用一些奇怪的角色。所以最后我找不到任何关于它的手册。

3 个答案:

答案 0 :(得分:4)

查看代码后。 Q在那些行之后的某处定义。由于makefile具有特殊的变量概念(可扩展),因此可以在任何地方实现。 Q用于是否显示消息(Q可能是安静的)。

ifeq ($(KBUILD_VERBOSE),1)
  quiet =
  Q =
else
  quiet=quiet_
  Q = @
endif

对于上一个@:,这意味着do-nothing-output-nothing

所以结论$(Q)@:只是do-nothing-output-nothing

答案 1 :(得分:0)

要加强和扩展nafsaka发现的内容: 有时,Makefile是这样写的:

target:
    rm -rf $(DIRECTORY)
    $(Q)$(MAKE) all

例如,Q将被定义为@或什么都不会:

V ?= 0
ifeq ($(V), 0)
    Q = @
else
    Q =
endif

如果目标动作前面有@,则make在运行时不会显示。这是有关该主题的GNU make文档:Recipe Echoing

在这种情况下,您需要在运行make之前定义V = 1才能看到正在运行的命令(这很常见)。

另一个问题:在您的Makefile中查找“ include file.mk”语句,在我的案例中这就是V和Q的定义位置。这是有关GNU make的文档,包括:Including Other Makefiles

答案 2 :(得分:0)

Make manual

5.2配方回显

通常,make将在执行配方之前打印配方的每一行。之所以称呼为回声,是因为它看起来像是您自己在键入行。

当一行以“ @”开头时,该行的回显将被抑制。在将行传递到外壳程序之前,将丢弃“ @”。通常,您会将此命令用于唯一的效果是打印某些内容的命令,例如echo命令以指示生成文件的进度:

@echo About to make distribution files

在给make标记“ -n”或“ --just-print”时,它仅回显大多数配方,而不执行它们。请参阅选项摘要。在这种情况下,甚至会打印以“ @”开头的配方行。此标志对于无需实际进行操作就能找出哪些食谱认为必要是有用的。

要制作的“ -s”或“ --silent”标志可防止所有回声,就好像所有食谱均以“ @”开头。 makefile中针对特殊目标.SILENT的无先决条件的规则具有相同的效果(请参阅特殊内置目标名称)。

相关问题