次: , 前: distcleancheck, 上: FAQ


26.5 なぜオブジェクトファイルの名前を変更することがあるのですか?

これは,ターゲットごとにコンパイルフラグが使用されているとき発生します. オブジェクトファイルは,同じソースから異なるフラグを用いてコンパイルさ れるオブジェクトが互いに壊されないように,名前を変更する必要があります. 以下の例を考えて下さい.

     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.ofalse-generic.oをビル ドするルールを出力します.

automakeは,オブジェクトファイルの名前を変更する必要があるか どうかを決定するため,実際にはソースファイルが共有されているかどうかを 見ていません.ターゲットごとのコンパイルフラグを使用していることが判明 したときに,すべてのターゲットのオブジェクトの名前を変更するだけです.

ターゲットごとのコンパイルフラグが使用されていないときは,オブジェクト ファイルを共有しても問題ありません.例えば以下の例のように, truefalseが両方とも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).