cdw*_*son 141 makefile gnu-make
Makefile中的以下内容是什么?
rule: $(deps)
@:
Run Code Online (Sandbox Code Playgroud)
我似乎无法在制作手册中找到这个.
Cha*_*tin 183
这意味着"不要在输出上回显此命令".所以这个规则是说"执行shell命令:
而不回显输出.
当然shell命令:
是no-op,所以这就是说"什么都不做,不要告诉".
为什么?
这里的诀窍是你有两种不同语法的模糊组合.在使(1)的语法是开始@,这简直是不呼应命令使用的动作.所以像这样的规则
always:
@echo this always happens
Run Code Online (Sandbox Code Playgroud)
不会发出
echo this always happens
this always happens
Run Code Online (Sandbox Code Playgroud)
现在,规则的操作部分可以是任何 shell命令,包括:
.Bash帮助解释了这个以及任何地方:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Run Code Online (Sandbox Code Playgroud)
小智 34
对于那些对你为什么这样做感到好奇的人来说,如果你想假装已经完成了某些事情,那么它就很有用,因此Make不会输出"你的目标无需做任何事".
一个例子是如果你有一个总是执行的虚假目标,并且在其中你在命令中有一堆条件.你想要至少有一些东西,以防这些条件出现错误,什么也没做.
例如(来自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
@:
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51175 次 |
最近记录: |