変数の割り当てが Makefile で実際にどのように機能するかを明確に説明できる人はいますか。
違いは何ですか :
VARIABLE = value
VARIABLE ?= value
VARIABLE := value
VARIABLE += value
GNU Make のマニュアルのセクションを読みましたが、それでも意味がわかりません。
変数の割り当てが Makefile で実際にどのように機能するかを明確に説明できる人はいますか。
違いは何ですか :
VARIABLE = value
VARIABLE ?= value
VARIABLE := value
VARIABLE += value
GNU Make のマニュアルのセクションを読みましたが、それでも意味がわかりません。
VARIABLE = value
変数の通常の設定ですが、フィールドで言及されている他の変数value
は、宣言されたときの値ではなく、変数が使用される時点での値で再帰的に展開されます
VARIABLE := value
内部の値を単純に展開する変数の設定 - その中の値は宣言時に展開されます。
VARIABLE ?= value
値がない場合のみの変数の設定。value
がアクセスされると常に評価されVARIABLE
ます。と同等です
ifeq ($(origin VARIABLE), undefined)
VARIABLE = value
endif
詳細については、ドキュメントを参照してください。
VARIABLE += value
提供された値を既存の値に追加します (変数が存在しない場合は、その値に設定します)。
を使用する=
と、変数に値が割り当てられます。変数がすでに値を持っている場合は、それが置き換えられます。この値は使用時に拡張されます。例えば:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
の使用:=
は、 の使用に似てい=
ます。ただし、値は使用時に展開されるのではなく、代入時に展開されます。例えば:
HELLO = world
HELLO_WORLD := $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# Still echoes "world world!"
echo $(HELLO_WORLD)
HELLO_WORLD := $(HELLO) world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
を使用すると、変数が以前に割り当てられていない場合に、変数に値?=
が割り当てられます。変数に以前に空白の値が割り当てられていた場合 ( )、それはまだ設定されていると見なされます。それ以外の場合は、 とまったく同じように機能します。VAR=
=
の使用+=
は の使用に似て=
いますが、値を置き換える代わりに、値が現在の値に追加され、その間にスペースが挿入されます。変数が以前に で設定されていた場合:=
は、展開されていると思います。結果の値は、使用すると拡張されると思います。例えば:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
のようなものHELLO_WORLD = $(HELLO_WORLD) world!
を使用すると、再帰が発生し、Makefile の実行が終了する可能性が高くなります。が使用された場合、結果は使用とまったくA := $(A) $(B)
同じにはなりません。+=
B
:=
+=
B
「make」を使用していくつかの実験を行うことをお勧めします。と の違いを示す簡単なデモを次に示し=
ます:=
。
/* Filename: Makefile*/
x := foo
y := $(x) bar
x := later
a = foo
b = $(a) bar
a = later
test:
@echo x - $(x)
@echo y - $(y)
@echo a - $(a)
@echo b - $(b)
make test
プリント:
x - later
y - foo bar
a - later
b - later bar
を使用するVARIABLE = value
場合、value
が実際に別の変数への参照である場合、値はVARIABLE
が使用されたときにのみ決定されます。これは、次の例で最もよく説明されています。
VAL = foo
VARIABLE = $(VAL)
VAL = bar
# VARIABLE and VAL will both evaluate to "bar"
使用すると、そのままVARIABLE := value
の価値が得られます。例えば:value
VAL = foo
VARIABLE := $(VAL)
VAL = bar
# VAL will evaluate to "bar", but VARIABLE will evaluate to "foo"
Usingとは、 ifがまだ設定されていない場合VARIABLE ?= val
にのみ値を設定することを意味します。まだ設定されていない場合、値の設定はが使用されるまで延期されます (例 1 のように)。VARIABLE
VARIABLE
VARIABLE
VARIABLE += value
に追加value
するだけVARIABLE
です。の実際の値は、またはvalue
を使用して、最初に設定されたときと同じように決定されます。=
:=