2

:= と += は Linux カーネル Makefile で同じであり、同じ意味で使用できますか? そうでない場合、2つの違いは何ですか?

4

4 に答える 4

9

他の人が言うように、:=割り当てです。

しかし、 と の間には微妙な違いが:=あり=ます。ほとんどの場合、それは問題ではありませんが、大きな違いを生む可能性があります。

X = $(Y)Xは、C プリプロセッサ マクロのような再帰変数として定義されます。
が参照されるたびXに、 の値Yが使用されます。
が展開されたときに展開が発生Xします。Yしたがって、 を定義した後で定義することができ、それでX問題ありません。

X := $(Y)X単純な変数として定義します。これは C の代入に似ています。
現在、Yは定義時に展開されているため、後で変更しても何も起こりません。

X += $(Y)に追加されXますが、その型は保持されます。以前に で定義されていた
場合、はすぐには展開されません。定義されていない場合も同じです。以前に で定義されていた 場合は、すぐに展開されます。X=YX
X:=Y

この例のmakefileを試すことができます:

X = 1

Y  = $(X)
Z := $(X)

X = 2

Y += $(X)
Z += $(X)

X = 3

test:
        @echo "Y = $(Y)"
        @echo "Z = $(Z)"

印刷します

Y = 3 3
Z = 1 2
于 2012-07-05T07:53:42.480 に答える
3

:= は =, i に似ています。e 課題です。

+= は、連結と代入の演算子です。

例:

VARIABLE := abc
# here VARIABLE is abc
VARIABLE := def
# VARIABLE is now def only!

VARIABLE_2 = abc
# VARIABLE_2 is now abc
VARIABLE_2 += def
# VARIABLE_2 is abc def
于 2012-07-05T06:50:06.917 に答える
0

:=課題です。 +=連結です。こちらをご覧ください。

于 2012-07-05T06:52:16.417 に答える