Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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中是什么意思?_Makefile_Gnu Make - Fatal编程技术网

@:(在符号冒号处)在Makefile中是什么意思?

@:(在符号冒号处)在Makefile中是什么意思?,makefile,gnu-make,Makefile,Gnu Make,以下内容在Makefile中执行什么操作 rule: $(deps) @: 我似乎在make手册中找不到这一点。它的意思是“不要在输出上回显此命令”。所以这条规则是说“执行shell命令:,不要回显输出 当然,shell命令:是一个no-op,所以这表示“什么都不做,也不要说。” 为什么? 这里的诀窍是,你得到了两种不同语法的模糊组合。make(1)语法是使用以@开头的操作,这只是为了不回显命令。因此 always: @echo this always happens

以下内容在Makefile中执行什么操作

rule: $(deps)
    @:
我似乎在make手册中找不到这一点。

它的意思是“不要在输出上回显此命令”。所以这条规则是说“执行shell命令
,不要回显输出

当然,shell命令
是一个no-op,所以这表示“什么都不做,也不要说。”

为什么?

这里的诀窍是,你得到了两种不同语法的模糊组合。make(1)语法是使用以@开头的操作,这只是为了不回显命令。因此

always:
       @echo this always happens
不会散发

   echo this always happens
   this always happens
现在,规则的操作部分可以是任何shell命令,包括
。Bash帮助以及任何地方都解释了这一点:

$ help :
:: :
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

对于那些想知道为什么要这样做的人来说,如果你想假装做了什么,那么Make就不会为你的目标输出“没什么要做的”

一个例子是,如果你有一个总是执行的虚假目标,并且在其中你的命令中有一堆条件。你希望至少有一些条件,以防这些条件出现错误而什么也做不到

例如(来自Linux的scripts/Makefile.clean):


谢谢,有什么地方能更详细地描述这一点吗?我不知道“我们”是什么意思“是的。别取笑我的打字,总有一天你也会变老的。这是一个很好的解释,说明了它的作用,但是你知道为什么要在生成文件中这样做吗?它在调用大量外部程序的生成文件中很有用,并且你想大量使用echo使它看起来更漂亮,像@charles keepax一样,如果你特别针对
@
(不仅仅是
@
)提问,那么除了@guestolio的答案之外,它还可能是开发过程中的遗留存根。这就像用Python编写一个只包含
pass
的函数。它对于截取代码块以进行复制/粘贴非常有用,但它们通常不会存在很长时间。当以这种方式存根时,文件仍然会编译、传递linting等。您能解释一下@#在makefile中的含义吗?
__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
    +$(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
    +$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
    +$(clean-rule)
endif
    @: