Next: Multiple Outputs, Previous: distcleancheck, Up: FAQ
これは,ターゲットごとにコンパイルフラグが使用されているとき発生します. オブジェクトファイルは,同じソースから異なるフラグを用いてコンパイルさ れるオブジェクトが互いに壊されないように,名前を変更する必要があります. 以下の例を考えて下さい.
bin_PROGRAMS = true false true_SOURCES = generic.c true_CPPFLAGS = -DEXIT_CODE=0 false_SOURCES = generic.c false_CPPFLAGS = -DEXIT_CODE=1
二つのプログラムが同じソースからコンパイルされ,同じオブジェクトが共有
される場合は問題になるのは明らかで,それは,generic.oは
-DEXIT_CODE=0
と-DEXIT_CODE=1
の両方を用いてコンパ
イルすることが不可能だからです.このため,automakeは二つの異
なるオブジェクト,true-generic.oとfalse-generic.oをビル
ドするルールを出力します.
automakeは,オブジェクトファイルの名前を変更する必要があるか どうかを決定するため,実際にはソースファイルが共有されているかどうかを 見ていません.ターゲットごとのコンパイルフラグを使用していることが判明 したときに,すべてのターゲットのオブジェクトの名前を変更するだけです.
ターゲットごとのコンパイルフラグが使用されていないときは,オブジェクト ファイルを共有しても問題ありません.例えば以下の例のように, trueとfalseが両方ともversion.oを使用しているとき です.
AM_CPPFLAGS = -DVERSION=1.0 bin_PROGRAMS = true false true_SOURCES = true.c version.c false_SOURCES = false.c version.c
オブジェクトファイルの名前の変更は,_SHORTNAME
変数にも影響され
ることに注意して下さい(see Program and Library Variables).