いくつかの Makefile ファイルを解析していくつかの構成を読み取ろうとしていますが、次のような幅広い式に遭遇しました。
AAA := Some, text
BBB_NAME := @AAA@ (c)
CCC = value
DDD = Some other $(CCC) xxx
これらすべてが有効かどうか、またそれらの間に違いがある場合はどうなるかを知りたいです(したがって、それらを適切に解析できます)。
いくつかの Makefile ファイルを解析していくつかの構成を読み取ろうとしていますが、次のような幅広い式に遭遇しました。
AAA := Some, text
BBB_NAME := @AAA@ (c)
CCC = value
DDD = Some other $(CCC) xxx
これらすべてが有効かどうか、またそれらの間に違いがある場合はどうなるかを知りたいです(したがって、それらを適切に解析できます)。
それらをMakefileに入れて実行することでわかるように、これらはすべて有効です。彼らが実際にどのような価値観を持っているか知りたい場合は、試してみることができます
$(info $(AAA))
(唯一の実際の問題は(c)
inBBB_NAME
にあることに注意してください。他の関数に渡すと、問題が発生する可能性があります。)
=
トリッキーな部分の1つは、と:=
(および他の代入演算子)の違いです。詳細はマニュアルに記載されていますが、基本的に:=
は右側を一度に評価し=
、左側がどこかで評価されるまで保留します。検討
CCC = value
DDD := Some other $(CCC) xxx
EEE = Some other $(CCC) xxx
EEEの値がであるのに対し、の値はになりましDDD
た。それらをどこかで使用する場合:Some other value xxx
Some other $(CCC) xxx
$(info $(DDD))
$(info $(EEE))
Makeは同じものに拡張$(DDD)
さ$(EEE)
れ、表示されます
Some other value xxx
Some other value xxx
ただし、違いがあります。
CCC = value
DDD := Some other $(CCC) xxx
EEE = Some other $(CCC) xxx
DDD := $(DDD) and yyy # This is perfectly legal.
EEE := $(EEE) and yyy # Infinite recursion. Make will not allow this.
CCC = dimension
$(info $(DDD)) # Produces "Some other value xxx and yyy"
$(info $(EEE)) # Produces "Some other dimension xxx"