1

私は現在、それぞれが独自のMakefileのセットを使用するC ++バイナリのセットを、Autotoolsをベースにしたより新しいものにアップグレードするために取り組んでいます。ただし、サードパーティのライブラリ(Oracle Instant Clientなど)をビルド/パッケージ化プロセスに含める方法がわかりません。

これは私が見逃した本当に単純なものですか?

編集して詳細を追加

私の現在のビルド環境は次のようになります。

/src
    /lib
        /libfoo
            ... source and header files
            Makefile
        /oci #Oracle Instant Client
            ... header and shared libraries
            Makefile
    /bin
        /bar
            ... source and header files
            Makefile
    Makefile
/build
    /bin
    /lib

build.sh

現在、トップレベルのbuild.shは次の手順を実行します。

  1. 各libのMakefileを実行し、出力を/ build/libにコピーします
  2. 各バイナリのMakefileを実行し、出力を/ build/binにコピーします

各Makefileには、さまざまな兄弟ディレクトリへのハードコードされたパスのセットがあります。言うまでもなく、これは維持するのが悪夢になっています。私はautotoolsのテストを開始しましたが、行き詰まっているのは、コンパイル時のリンクとディストリビューションへのバンドルのために/src/lib/oci/*.soを/build/libにコピーするのと同じことを考えています。

4

2 に答える 2

2

私はこれを実現する方法を考え出しました。

まず、非再帰的なメイクに切り替えました。

次に、このページhttp://www.openismus.com/documents/linux/using_libraries/using_librariesに従って、configure.amに次の変更を加えました。

AC_ARG_WITH([oci-include-path],
    [AS_HELP_STRING([--with-oci-include-path],
        [location of the oci headers, defaults to lib/oci])],
    [OCI_CFLAGS="-$withval"],
    [OCI_CFLAGS="-Ilib/oci"])
AC_SUBST([OCI_CFLAGS])
AC_ARG_WITH([oci-lib-path],
    [AS_HELP_STRING([--with-oci-lib-path],
        [location of the oci libraries, defaults to lib/oci])],
    [OCI_LIBS="-L$withval -lclntsh -lnnz11"],
    [OCI_LIBS='-L./lib/oci -lclntsh -lnnz11'])
AC_SUBST([OCI_LIBS])

次に、Makefile.amで、次の行を使用します(fooという名前のバイナリを想定)

foo_CPPFLAGS = $(OCI_CFLAGS)
foo_LDADD = libnavycommon.la $(OCI_LIBS)

ocidir = $(libdir)
oci_DATA = lib/oci/libclntsh.so.11.1 \
    lib/oci/libnnz11.so \
    lib/oci/libocci.so.11.1 \
    lib/oci/libociicus.so \
    lib/oci/libocijdbc11.so
于 2012-01-06T17:13:58.230 に答える
0

autotoolsはパッケージ管理システムではないので、そのタイプの機能を導入しようとするのは悪い考えです。サードパーティのライブラリをディストリビューションに組み込むのではなく、configureスクリプトでその存在を確認し、必要なライブラリが利用できない場合は中止する必要があります。依存関係を満たす責任はユーザーにあります。次に、ユーザーがパッケージ管理システムを使用して依存関係の解決を簡素化できるようにするバイナリパッケージをリリースできます。

于 2011-12-29T19:01:45.720 に答える