シェルスクリプトロジックまたはデフォルトのmakeロジックを介してMakefileに変数を設定しますが、環境変数にない場合はデフォルト値を割り当てます。

シェルスクリプトロジックまたはデフォルトのmakeロジックを介してMakefileに変数を設定しますが、環境変数にない場合はデフォルト値を割り当てます。

以下のコードスニペットのようなものがあります。シェルスクリプトロジックを介してMakefileで定義されていないENV変数を正しく設定する方法は?スクリプトが実行され、環境変数がすでに環境に定義されている場合、すべてが機能しているように見えますが、そうでない場合はデフォルト値に設定されません(空または未設定のまま)。

私は似たようなものを好みますFROM_ENV_VAR=${FROM_ENV_VAR:-"default value"}が、Makefile構文には別のENV var(もちろん同じvarの場合もあります)で変数を設定し、それ以外の場合はデフォルト値を割り当てるのと同じものがありますか?

MAKE_VAR=fromake

.PHONY: trial

trial:
    if [ -z ${FROM_ENV_VAR} ]; then \
        FROM_ENV_VAR="defaulting"; \
        echo "setting VAR since not defined from ENV, val: ${FROM_ENV_VAR}"; \
        echo "and make's VAR is ${MAKE_VAR}, from shell script"; \
    else \
        echo "using ENV VAR's defined value: ${FROM_ENV_VAR}"; \
        echo "and make's VAR is ${MAKE_VAR}, from shell script"; \
    fi

    echo "in make, make var is $(MAKE_VAR)"
    echo "in make, shell var is $(FROM_ENV_VAR)"

答え1

?=まだ定義されていない変数のみを設定する条件付き変数割り当て演算子を使用できます。詳細については下を参照これマニュアルのページmake

たとえば、次のMakefileを使用します。

MYVAR?=Set by make

.PHONY: all
all:
    @echo ${MYVAR}

次のような結果が得られます。

$ make
Set by make
$ MYVAR="Set on the command line" make
Set on the command line

関連情報