0

fooプロジェクトには、次のようなファイルシステムレイアウトでライブラリのコピーが付属しています。

myproject/
myproject/src/ # sources of my project
myproject/libfoo/ # import of "foo" library

標準の(autotoolsベースの)ビルドシステムはlibfooをビルドし、次に。に対して動的にリンクするmyprojectをビルドしますlibfoolibfoo基本的に変更されていません(ビルドシステムに適切に適合するようにいくつかのマイナーな修正が加えられています)。libfooautotools自体を使用するため、通常はを使用してconfigureを再帰的に呼び出しますAC_CONFIG_SUBDIRS

ただし、libfooすでにさまざまなディストリビューション用にパッケージ化されているため、これらのシステムでインポートされたライブラリに対してビルドするのではなく、システム全体のインストールを使用したいと思います。これにより、libfooのより適切に保守されたバージョンの利点を得ることができます(バグやセキュリティの問題が少なくなります)。 、...)。otoh、libfooをソースツリーに保持したいので、そのライブラリを出荷しないシステムでビルドするためのフォールバックがあります(ユーザーがソースを個別にフェッチしてlibを自分でビルドする必要はありません)。

導入できるconfigure-flagの数を考えることができるので、ユーザーは、システムがインストールされているか、ローカルであるか、ライブラリなしでプロジェクトをビルドするかを選択できます。(これはオプションの依存関係です)。「ローカルfoo」を無効にすると、libfooのビルドが完全に無効になります(おそらくfooの構成も無効になります)。

例:次のようなもの

./configure --enable-foo=no    # aka "--disable-foo": build without foo
./configure --enable-foo       # use system-wide foo
./configure --enable-foo=local # use local copy of foo

または:

./configure --disable-foo
./configure --enable-foo  --disable-local-foo
./configure --enable-foo  --enable-local-foo

しかし、私はこれを標準に準拠した方法で実行したいと思います。

ローカルコピーまたはライブラリ、システム全体のコピーを使用するか、ライブラリをまったく使用しないか、autoconfを介して選択するためのベストプラクティスは何ですか?

このようなメカニズムを使用するプロジェクトへのポインタは大歓迎です。

4

3 に答える 3

3

私のプロジェクトにも同様のものがあり、(1)ライブラリがまだインストールされていない場合、または(2)インストールされているが、期待するインターフェイスが必要ない場合、または(3 configure)で実行し--with-included-buddyます。

ここconfigureでマクロを見ることができます。その後、sでとを使用するだけで、トップレベルには条件付きでディレクトリのみが含まれます。$(BUDDY_CPPFLAGS)$(BUDDY_LDFLAGS)Makefile.amMakefile.ambuddySUBDIRS

于 2013-03-06T07:30:51.210 に答える
1

私は本当にあなたがこれをしたいとは思わない

ビルド機構をより複雑にするつもりであり、autotools はすでに多くの人にとって黒魔術と見なされています。開発者にとっては物事がはるかに複雑になり、潜在的なディストリビューション パッケージャーにとっては少し複雑になり、エンド ユーザーにとっては非常に簡単になります。

条件付きで構成している場合は、ディストリビューション tarball ( make dist/ make distcheck) を構築するプロセスがより脆弱になります。

これは、あなたが引き起こす可能性のある種類の問題です。

しかし、もしあなたがしなければならないなら...

私の最近の回答でコードを適応させることができるかもしれません。

于 2013-03-05T21:38:34.033 に答える
1

外部ソフトウェアを扱うときは--with-fooを好みますが、それは単なる好みです。リンク先の例とドキュメントは、どのように実行するかを決定するのに役立つ場合があります。ドキュメント/メンテナンスを容易にするために、2つのフラグを使用する2番目の例ではなく、1つのフラグのみを使用する最初の例を使用します。

于 2013-03-05T18:38:29.207 に答える