Makefileのこれら2つのコマンドの違いは何ですか?
@echo "Hello World"
$(info Hello World)
どうやら、echo
とinfo
は同じ出力を出力しますが、違いはどこにありますか?そして、いつどれを使うのですか?
さて、echo
はシェルコマンドです。したがって、レシピに入れると、シェルが呼び出されて実行され、シェルコマンドが出力を生成します。
foo: ; @echo "Hello World"
実行/bin/sh -c 'echo "Hello World"'
。レシピでのみ使用できます。これは、どのバージョンのmakeでも、どのPOSIXシェルでも機能します。シェルを呼び出すため、引用の問題などに注意する必要がある場合があります(もちろんこの単純な例ではありません)。
info
はGNU make関数です。makeによって直接処理されます。シェルは呼び出されません。レシピだけでなく、makefileのどこにでも表示できます。そうではありません。他のバージョンのmakeに移植可能です。シェルが呼び出されないため、引用の問題はありません。
ただし、info
はmake関数であるため、シェルが呼び出される前にmakeによって解析されます。つまり、レシピ内に設定されているシェル変数を表示することはできません。例えば:
foo: @for i in a b c d; do $(info $$i); done
動作しません。ここではecho
を使用する必要があります。