Makefile中的以下内容是什么?
rule: $(deps)
@:
我似乎无法在制作手册中找到这个。
答案 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
@: