@:(在符号冒号)在Makefile中是什么意思?
下面在Makefile中做了什么?
rule: $(deps) @:
我似乎无法在make手册中find这个。
这意味着“不要在输出中回显这个命令”。 所以这个规则是说“执行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.
对于那些为什么你可能会这样做感到好奇的人,如果你想假装完成了某些事情,那么Make就不会输出“Nothing to be done for”你的目标。
一个例子是如果你有一个你永远执行的假目标,并且在这个命令中你有一堆条件。 你想至less有一些事情,以防止这些情况出现虚假,什么都不做。
例如(从Linux的脚本/ 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 @: