3

手作業でコーディングされたMakefileのセットからGNUAutoMakeに変換しているCアプリケーションがあります。これには、インターフェイスヘッダーといくつかのプラットフォーム依存の実装を含むサブディレクトリがあります。現在、実装が選択され、そのディレクトリ内の固定名のオブジェクトファイルにビルドされています。次に、ドライバーインターフェイスを使用するコードは、そのオブジェクトファイルにリンクし、適切なドライバーを自動的に取得します。

このシステムをAutoToolsを使用するように変換する最良の方法は何ですか?私はすでにAutoConfが正しいドライバー実装ファイルの代わりを作成しています。実装ファイルを入れることができる変数を持つAutoMakeターゲットを取得する方法がわかりませEXTRA_*_SOURCES*_LDADD。中間オブジェクトファイルをあきらめて、それらを使用するプログラムターゲットのリストに入れる必要がありますか?

編集: ptomatoのおかげで解決しました。

Automakeの依存関係の解決のため、マニュアルの「条件付きソース」セクションで説明されているように、すべての可能なソースに*_SOURCESとで名前を付ける必要があります。したがって、ライブラリスタンザは実際には次のようになります。EXTRA_*_SOURCES

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = driver.h
EXTRA_libdriver_a_SOURCES = driver-linux.c driver-windows.c driver-osx.c
libdriver_a_LIBADD = @DRIVERIMPL@
4

1 に答える 1

2

コンビニエンスライブラリを構築し、それをアプリケーションに静的にリンクすることができます。最終的には、それとオブジェクトファイルの間にほとんど違いはありません。Automakeマニュアルのこのページを参照してください。基本的には次のようになります。

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = @CORRECT_IMPLEMENTATION_FILE@
myprogram_LDADD = libdriver.a

ここで、固定名の中間オブジェクトファイルはlibdriver.a、であり、アプリケーションはmyprogramです。

しかし、これは私には不必要に複雑に思えます。あなたが提案するように、中間オブジェクトファイルをあきらめて、それらを使用するプログラムターゲットに実装ファイルを配置するべきではない理由はわかりません。

于 2010-06-29T19:27:59.613 に答える