Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile中$(Q)@:的含义是什么_Makefile_Gnu Make - Fatal编程技术网

Makefile中$(Q)@:的含义是什么

Makefile中$(Q)@:的含义是什么,makefile,gnu-make,Makefile,Gnu Make,我在linux Makefile中读到: $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make $(Q)@: $(Q)@:的含义是什么 我试着用谷歌搜索,但是如果搜索使用了一些奇怪的字符,谷歌总是很糟糕。所以最后我找不到任何关于它的手册。查看代码后。Q是在这些行之后的某个地方定义的。由于makefile具有特殊的变量概念(可扩展),所以它可以在任何地方实现。Q用于是否显示消息(Q可能

我在linux Makefile中读到:

$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
    $(Q)@:
$(Q)@:
的含义是什么


我试着用谷歌搜索,但是如果搜索使用了一些奇怪的字符,谷歌总是很糟糕。所以最后我找不到任何关于它的手册。

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

最后,这意味着什么也不做,什么也不输出


因此结论是:简单地
什么都不做,什么都不输出

来巩固和扩展nafsaka的发现: 有时生成文件的编写方式如下:

Q将被定义为@或无,例如:

如果目标操作前面有@,则make在运行时不会显示它。以下是关于该主题的GNU make文档:

在这种情况下,您需要在运行make之前定义V=1,以查看正在运行的命令(这非常常见)

另一个缺点是:在Makefile中查找“include file.mk”语句,在我的例子中,这里定义了V和Q。以下是GNU make关于include:

的文档,来自:

5.2配方回声

通常,make会在配方执行前打印每一行。我们称之为回音,因为它给人的感觉是你自己在打字

当一行以“@”开头时,该行的回音将被抑制。在将行传递到shell之前,将丢弃“@”。通常,您会将其用于命令,该命令的唯一效果是打印某些内容,例如用于指示通过makefile的进度的echo命令:

@echo About to make distribution files
当make被赋予'-n'或'-just print'标志时,它只响应大多数配方,而不执行它们。请参阅选项摘要。在这种情况下,甚至会打印以“@”开头的配方行。此标志用于找出make认为哪些食谱是必要的,而不是实际执行这些食谱

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

target:
    rm -rf $(DIRECTORY)
    $(Q)$(MAKE) all
V ?= 0
ifeq ($(V), 0)
    Q = @
else
    Q =
endif
@echo About to make distribution files