回答:
「このコマンドを出力にエコーしないでください」という意味です。したがって、このルールは「シェルコマンド:
を実行し、出力をエコーしません。
もちろん、シェルコマンド:
は何もしないので、これは「何もせず、言わないで」と言っています。
どうして?
ここでの秘訣は、2つの異なる構文のあいまいな組み合わせがあることです。メイク(1)構文は、コマンドをエコーするだけではなく、@から始まるアクションの使用です。のようなルール
always:
@echo this always happens
放出しません
echo this always happens
this always happens
現在、ルールのアクション部分は、を含む任意のシェルコマンドにすることができます:
。Bashのヘルプはこれをどこでも説明しています:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
@:
(だけでなく@
)に関して具体的に質問している場合は、@ guestolioの回答に加えて、開発の残りのスタブである可能性もあります。Pythonでだけを含む関数を書くようなものpass
です。コピー/貼り付けのためにコードのブロックをスタブするのに役立ちますが、それらは一般的に長く存在すべきではありません。この方法で
なぜこれを行うのかについて知りたい場合は、何かが行われたかのように見せかけ、Makeがターゲットに対して「実行する必要のないこと」を出力しないようにする場合に便利です。
1つの例は、常に実行する偽のターゲットがあり、その中にコマンド内に多数の条件がある場合です。これらの条件が偽になり、何も実行されない場合に備えて、少なくとも何かが必要です。
たとえば(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
@: