このコードは、GNU makefile マニュアルの 8.6 章から入手したものです。
@どういう意味ですか?[Eメール保護]makefileのファイル関数argはどういう意味ですか? rmなどのシェルコマンドの前に「@」記号が付いているのはなぜですか?
program: $(OBJECTS)
$(file >[email protected],$^)
$(CMD) $(CMDFLAGS) @[email protected]
@rm [email protected]
ファイル関数の構文は次のとおりです。
$(file op filename[,text])
ベストアンサー1
これには互いに関係のない3つの用途があります@
。
で$@
キャラクター@
は名前です自動変数ルールで使用できます。この変数の値は、ルールが構築されるターゲットです。
@
レシピ(コマンドライン)行の先頭、つまりタブ文字の直後に使用すると、コマンドが実行されます。印刷しない実行しようとしたとき。
他の場所のキャラクターは@
特別なものではありません。
したがって、あなたの例では以下を構築してくださいprogram
。
- これ
file
機能呼び出されます。ターゲット(自動変数)$^
の依存関係をファイルに書き込みますprogram.in
。 変数に保存されているすべてのコマンドは、
CMD
変数に保存されているパラメータCMDFLAGS
と追加のパラメータを使用して実行されます@program.in
。これがすることはCMD
それが何であるかによって異なります。コマンドは
rm program.in
最初に印刷せずに実行されます。
一部のコマンドは、先頭のパラメーターを、より多くの@
パラメーターを読み取るファイルを表すものとして扱います。これは、DOSがコマンドラインの長さに厳しい制限を設けてコマンドラインにコマンド出力を挿入できないために発生したDOSルールです。 Unixにはこのような制限がないため、これはUnixの世界では一般的ではありません。したがって、この式の効果は次のようになります。
$(CMD) $(CMDFLAGS) $(OBJECTS)