foo
プロジェクトには、次のようなファイルシステムレイアウトでライブラリのコピーが付属しています。
myproject/
myproject/src/ # sources of my project
myproject/libfoo/ # import of "foo" library
標準の(autotoolsベースの)ビルドシステムはlibfooをビルドし、次に。に対して動的にリンクするmyprojectをビルドしますlibfoo
。
libfoo
基本的に変更されていません(ビルドシステムに適切に適合するようにいくつかのマイナーな修正が加えられています)。libfoo
autotools自体を使用するため、通常はを使用して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を介して選択するためのベストプラクティスは何ですか?
このようなメカニズムを使用するプロジェクトへのポインタは大歓迎です。