@ :(符号冒号)在Makefile中的含义是什么?

时间:2011-12-22 23:21:20

标签: makefile gnu-make

Makefile中的以下内容是什么?

rule: $(deps)
    @:

我似乎无法在制作手册中找到这个。

2 个答案:

答案 0 :(得分:168)

这意味着“不要在输出上回显此命令”。所以这个规则是说“执行shell命令:并且不回显输出。

当然shell命令:是无操作的,所以这就是说“什么也不做,不要告诉。”

为什么?

这里的诀窍是你有两种不同语法的模糊组合。 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.

答案 1 :(得分:31)

对于那些对你为什么会这样做感到好奇的人来说,如果你想假装某些东西已经完成,那么它就很有用,所以Make不会输出“你的目标没什么可做的。”

一个例子是,如果你有一个总是执行的虚假目标,并且在其中你在命令中有一堆条件。你想要至少有一些东西,以防这些条件出现错误而且什么都没有完成。

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

__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
    @: