1. ホーム
  2. variables

[解決済み] Makefileの変数の初期化とエクスポート

2022-02-03 01:27:27

質問

somevar := apple
export somevar
update := $(shell echo "v=$$somevar")

all:
    @echo $(update)

コマンドの出力としてリンゴを期待していたのですが、空っぽなので、exportと := 変数展開が異なるフェーズで行われている。

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

問題は export は、コマンドで使用されるサブシェルに変数をエクスポートします。他の代入で展開することはできません。ですから、ルール外の環境からそれを取得しようとしないでください。

somevar := apple
export somevar

update1 := $(shell perl -e 'print "method 1 $$ENV{somevar}\n"')
# Make runs the shell command, the shell does not know somevar, so update1 is "method 1 ".

update2 := perl -e 'print "method 2 $$ENV{somevar}\n"'
# Now update2 is perl -e 'print "method 2 $$ENV{somevar}\n"'

# Lest we forget:
update3 := method 3 $(somevar)

all:
    echo $(update1)
    $(update2)
    echo $(update3)
    perl -e 'print method 4 "$$ENV{somevar}\n"'