1

いくつかの Makefile ファイルを解析していくつかの構成を読み取ろうとしていますが、次のような幅広い式に遭遇しました。

AAA := Some, text
BBB_NAME := @AAA@ (c)
CCC = value
DDD = Some other $(CCC) xxx

これらすべてが有効かどうか、またそれらの間に違いがある場合はどうなるかを知りたいです(したがって、それらを適切に解析できます)。

4

1 に答える 1

2

それらをMakefileに入れて実行することでわかるように、これらはすべて有効です。彼らが実際にどのような価値観を持っているか知りたい場合は、試してみることができます

$(info $(AAA))

(唯一の実際の問題は(c)inBBB_NAMEにあることに注意してください。他の関数に渡すと、問題が発生する可能性があります。)

=トリッキーな部分の1つは、と:=(および他の代入演算子)の違いです。詳細はマニュアルに記載されていますが、基本的に:=は右側を一度に評価し=、左側がどこかで評価されるまで保留します。検討

CCC = value
DDD := Some other $(CCC) xxx
EEE = Some other $(CCC) xxx

EEEの値がであるのに対し、の値はになりましDDDた。それらをどこかで使用する場合:Some other value xxxSome 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"
于 2012-05-03T12:18:02.570 に答える