0

C++ ライブラリの共通セットをすべて共有するさまざまなプロジェクトのセットがあります。現在、これらの共通ライブラリは各コード ベースにコピーされていますが、これが大きな問題になっています。バージョン管理に Subversion を使用しているため、共通ライブラリを svn externals のセットに変更する予定です。

親/子 Makefile.am を作成する方法、または Makefile.ams を自動的にマージする方法が必要ですが、これを行うと。これは可能ですか?SUBDIR 機能については知っていますが、再帰的な make を避けようとしています。

4

1 に答える 1

2

ここでは、静的ライブラリを使用すると仮定します。これにより、作業が簡単になります。

あなたの共通ライブラリには独自のconfigure.acMakefile.amがあり、おそらく の下にライブラリを定義しているように見えますnoinst_LIBRARIES

ライブラリを使用するプロジェクトには、次のような svn external を介して共通ライブラリがインポートされます。

foo/
foo/configure.ac
foo/Makefile.am
foo/...
foo/libcommon/
foo/libcommon/configure.ac
foo/libcommon/Makefile.am
foo/libcommon/...

foo のconfigure.acに、 への呼び出しを追加しますAC_CONFIG_SUBDIRS([libcommon])。fooMakefile.amに、 を追加しSUBDIRS = libcommonます。この 1 つのレベルを除いて、foo と libcommon の両方が非再帰的である可能性があります。foo'sMakefile.amでは、次のようなものを追加しますLDADD = libcommon/libcommon.a。のようなものを追加する必要がある場合もありますAM_CPPFLAGS = -I$(srcdir)/libcommon/include

次に、foo を構成すると、libcommon が構成されてビルドされます。ライブラリが noinst として宣言されているという事実は、静的にリンクされるだけで、ファイルシステムにはインストールされないことを意味します。

于 2012-09-29T10:50:04.943 に答える