私が使用する基本的なステップMakefile
は、他のオプションのヘルプドキュメントを印刷することです。EOF
複数のセクションの代わりにセクションを1つだけ追加できれば幸いですecho
。 bashスクリプトのように使用できますかEOF
?Makefile
答え1
GNU makeを使用している場合は、次のdefine
構文を使用できます。複数行変数:
define message =
You can also include make macros like
$$@ = $@
in a multi-line variable
endef
help:; @ $(info $(message)) :
遊びながらvalue
関数和export
.ONESHELL
ディレクティブを使用すると、Makefileにスクリプト全体を含めることもできます。これにより、グローバルに開かずに複数行のコマンドを使用できます。
define _script
echo SHELL is $SHELL, PID is $$
cat <<'EOF'
literally $SHELL and $$
EOF
endef
export script = $(value _script)
run:; @ eval "$$script"
減らす
SHELL is /bin/sh, PID is 12434
literally $SHELL and $$
答え2
簡単な答えは「基本的にではありません」です。ただし、GNU makeを設定して次のものを使用できるようにすることができます。.ONESHELL:
通常、レシピの各行は独自のシェルで実行されます。さらに悪いことは、makeで複数行のコマンドを作成する方法があるということです。\
行の末尾に を使用して続行することです。 残念ながら、これは\
シェルにも渡されます。これは他のコマンドでは大きな問題ではありませんが、heredocでは構文が実際に混乱します。
ただし、.ONESHELL:
このロジックを有効にすると、コマンドは単一のシェルで実行されて動作する可能性があります。
.ONESHELL:
all:
cat << EOF
aaa
bbb
EOF
これはMakeの機能にさらに影響を与えることに注意してください。特に、Makeは、他のビルドラインが次に来ると、ビルドラインが失敗するかどうか気付かないかもしれません。通常は各行の結果を確認しますが、.ONESHELL:
makeを使用するとすべての行の結果のみを表示できます。