1. ホーム
  2. variables

[解決済み] Makefile で複数行の文字列変数を作成することは可能ですか?

2022-05-24 22:37:47

質問

複数行の文字列 (例: リリース発表のメール本文) である makefile 変数を作成したいのですが、以下のようなものです。

ANNOUNCE_BODY="
Version $(VERSION) of $(PACKAGE_NAME) has been released

It can be downloaded from $(DOWNLOAD_URL)

etc, etc"

しかし、この方法を見つけることができないようです。 可能なのでしょうか?

どのように解決するのですか?

はい、このように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)" を使うという当たり前のことをすれば、他の人がここに投稿したような結果になります。

しかし、変数の値をそのまま環境変数としてシェルにエクスポートし、シェルから環境変数 (メイク変数ではありません) として参照することができます。 例えば

export ANNOUNCE_BODY
all:
    @echo "$$ANNOUNCE_BODY"

を使うことに注意してください。 $$ANNOUNCE_BODY でなく、シェル環境変数の参照であることを示す $(ANNOUNCE_BODY) ではなく、シェル環境変数の参照であることを示します。 また、改行がシェル自身によって解釈されないように、変数参照の周囲には必ず引用符を使用してください。

もちろん、この特別なトリックはプラットフォームとシェルに依存する可能性があります。 私は、Ubuntu Linux で GNU bash 3.2.13 と共にこれをテストしました。