複数行の文字列(例えば、電子メールのリリースアナウンスの本文)のmakefile変数を作成したい。
ANNOUNCE_BODY="
Version $(VERSION) of $(PACKAGE_NAME) has been released
It can be downloaded from $(DOWNLOAD_URL)
etc, etc"
しかし、これを実行する方法が見つからないようです。可能でしょうか?
ベストアンサー1
はい、defineキーワードを使用して宣言することができます。複数行変数、 このような:
define ANNOUNCE_BODY
Version $(VERSION) of $(PACKAGE_NAME) has been released.
It can be downloaded from $(DOWNLOAD_URL).
etc, etc.
endef
難しいのは、複数行の変数を makefile から取り出すことです。「echo $(ANNOUNCE_BODY)」を使用するという明白なことを実行すると、他の人がここに投稿した結果が表示されます。つまり、シェルは変数の 2 行目以降をコマンドとして処理しようとします。
ただし、変数値をそのまま環境変数としてシェルにエクスポートし、シェルから環境変数 (make 変数ではない) として参照することができます。例:
export ANNOUNCE_BODY
all:
@echo "$$ANNOUNCE_BODY"
$$ANNOUNCE_BODY
通常の make 変数参照であるではなく、シェル環境変数参照を示す を使用していること$(ANNOUNCE_BODY)
に注意してください。また、変数参照を引用符で囲み、改行がシェル自体によって解釈されないようにしてください。
もちろん、この特定のトリックはプラットフォームとシェルに依存する可能性があります。私はこれを Ubuntu Linux と GNU bash 3.2.13 でテストしましたが、結果は異なる場合があります。