_SOURCES
_SOURCES
変数は,プログラム(see A Program),ライブラリ
(see A Library),そしてLibtoolライブラリ(see A Shared Library)
のソースファイルを指定するために使用します.
そのような変数がターゲットに対して指定されていない場合,Automakeは独自 に定義します.デフォルトは,コンパイルする単一のCファイルで,その名前 はターゲット自身の名前を元にしていて,拡張子を.cに置換したもの です.(Cのデフォルトは危険ですが,我々は歴史的な理由で身動きがとれなく なっています.)
例えば,以下のようなMakefile.amがあって,対応する ‘libfoo_a_SOURCES’が無い場合を考えます.
lib_LIBRARIES = libfoo.a sub/libc++.a
libfoo.aはデフォルトのソースファイル名libfoo.cを使用して ビルドされ,sub/libc++.aはsub/libc++.cからビルドされます. (より古いバージョンでは,sub/libc++.aはsub_libc___a.cか ら,すなわちデフォルトのソースはターゲットの標準的な名前に.cを 追加したものでした.我々は,新しい動作はより賢明だと信じていますが,後 方互換性として,その名前のファイルやルールが存在する場合,automakeは古 い名前を使用します.)
デフォルトのソースは,たくさんのテストプログラムをそれぞれ単一のソース からビルドする,テストスイートで主に役に立ちます.例えば以下のようにし ます.
check_PROGRAMS = test1 test2 test3
test1,test2,そしてtest3は,それぞれ test1.c,test2.c,そしてtest3.cからビルドされます.
これが便利になるもう一つの状況は,独自のファイル(moduleN.c)で定 義されている多くのLibtoolモジュール(moduleN.la)をビルドするとき です.
AM_LDFLAGS = -module lib_LTLIBRARIES = module1.la module2.la module3.la
おしまいに,このデフォルトのソースを求めることを避ける必要がある状況が
一つあります.ターゲットがソースからビルドされないときです.我々は
trueでそのような例を見てきました.これは,ターゲットのすべての構
成要素が既にコンパイルされていて,単に_LDADD
変数を使用して結合
する必要があるときに生じます.そして,automakeがデフォルトを求めないよ
うに空の_SOURCES
変数を定義する必要があります.
bin_PROGRAMS = target target_SOURCES = target_LDADD = libmain.a libmisc.a