2012-05-03 4 views
1

私はいくつかのconfigsそれらそれらを読むためにいくつかのMakefileファイルを解析しようとしていますし、私のような表現の広い範囲が発生しました:私はこれらのすべてが有効で、いずれかがそこにあるものならばどうかを知りたいMakefileファイルで使用できる変数の割り当てと展開の方法は何ですか?

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

をそれらの違い(私は適切に解析することができます)。

答えて

2

これらはすべてMakefileに入れて実行することでわかります。あなたは、彼らが実際に取る値かを知りたい場合は、

$(info $(AAA)) 

を試すことができます(唯一の本当の問題はBBB_NAME(c)であることに注意してください、あなたが他の関数に渡した場合、それは問題を引き起こす可能性があります。)

1つのトリッキーな部分は、=:=(およびその他の代入演算子)の違いです。詳細はthe manualですが、基本的には:=が右側を評価し、=は左側が評価されるまで保持します。 EEEの値がSome other $(CCC) xxxている間DDDの値は、今Some other value xxxある

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

を考えてみましょう。あなたがそれらを使用する場合は、どこか:

$(info $(DDD)) 
$(info $(EEE)) 

メイクは同じことに$(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" 
+0

はそれは$を使用することがより正確です'$(info $(value AAA))'のように、(value ...)関数を呼び出すことができます。これは 'AAA'変数の内容を最初に展開することなく表示します。 '$(AAA)'のような参照を使うと値を展開してから表示します。 – MadScientist

関連する問題