1
docによると、レシピ部分では、タブの後のコードがシェルに送られます。シェルはmakefile関数を知らないはずです。私はmake a
を実行した場合たとえば、メイクファイル機能がレシピ部分でも機能するのはなぜですか?
a:
<tab>$(info ===)
、それは
===
make: `a' is up to date.
なぜを出力しますか?シェルは$(info ===)
を知らないのですが、それはなぜ===
を出力できますか?
こんにちは、デレクブラウン。答えてくれてありがとう。しかし、私は理解していません。これは、ドキュメントhttps://www.gnu.org/software/make/manual/html_node/Execution.html#Executionと一貫していません。各行はサブシェルによって実行されます。 – user15964
@ user15964各行はサブシェルによって実行されます。しかし、各行がサブシェルに渡される前に、 'make'は' $(...) 'や' $ {...} 'の形式の変数とメソッド呼び出し構文を処理します。詳細はこちらhttps://www.gnu.org/software/make/manual/html_node/Variables-in-Recipes.html#Variables-in-Recipes –
しかしこれは別の問題を引き起こします。 '$(info ===)'が最初にmakeによって解釈されると、 '==='になります。この '==='がシェルに渡された場合、これは認識できないコマンドであり、エラーメッセージが表示されます。しかし実際、makeはこれについて不平を言っていません。だから '==='はシェルに送られませんよね?しかしあなたのリンク 'の$ i(LIST)の例では、 \ 'を最初に展開してシェルに送ります。これは一貫していません – user15964