Makefileで複数行の文字列変数を作成することは可能ですか?質問する

Makefileで複数行の文字列変数を作成することは可能ですか?質問する

複数行の文字列(例えば、電子メールのリリースアナウンスの本文)の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 でテストしましたが、結果は異なる場合があります。

おすすめ記事