2013-08-16 16 views
6

私のプロジェクトは、GNUオートツール(aclocal && autoconf && ./configure && make)を使ってコンパイルします。私はBoostを使いたいと思います。他の人も同様にコンパイルできるようにしたいと思います。GNU AutotoolsプロジェクトにBoostを含めるには?

  1. Boostをプロジェクトのディレクトリに配置するか、システムのBoostに依存する必要がありますか?
  2. autotoolsにBoostを使用するように教えてください。私はグーグルで、これを行うと主張する多くのm4ファイルを見つけました - しかし、それらのm4ファイルはどこに置くべきですか?私は/usr/share/aclocal dirに1つを隠すことができますが、それは./configure && makeを使ってプロジェクトをコンパイルしたいと思う他の人を助けません。

答えて

0
  1. 私はは、システムのブーストのインストールに依存している間違いなくを思います。 IIRCは、Boostをビルドした最後の非標準ツール(autoconfに必要なポータブルツール)を必要としました。それはまた、長い時間がかかりました。これらの.m4ファイルは、マクロが "M4" ディレクトリにある

    AC_CONFIG_MACRO_DIR([m4]) 
    

を行くところ

  • AC_CONFIG_MACRO_DIRです。私はさまざまなBoost .m4マクロが何かを伝える方法を持っていると期待しています。configure(複数のBoostインストールを探すための)Boostパッケージと(非標準インストール)の場所。

  • +0

    ありがとうございました。あなたは 'AC_CONFIG_MACRO_DIR'の使い方の例を挙げることができますか?私はACの難解を見つける。また、ユーザーがWebサイトの指示に従ってBoostをインストールすると、ACはそれを見つけることができますか? "エラー:ブーストが必要です。http:// ...の指示に従ってインストールしてください。" – SRobertJames

    +0

    システムのブーストが古くなっているか、互換性がない可能性があるため、エラーメッセージが表示されます。ホームディレクトリに別のバージョンをインストールします(rootアクセス権がない場合)。 – DanielKO

    +0

    その場合、私はおそらく動作するであろう予め構築されたバージョンのBoostを探すでしょう。それに失敗すると、インストールされているBoostバージョンのソースをパッチしたり、ソースからBoostをダウンロードしてビルドすることができます。 – ldav1s

    1

    m4サブディレクトリにプロジェクトに含めることができる優れたboost.m4マクロがあります。これらのマクロはにAC_CONFIG_MACRO_DIR([m4])という位置にあります。

    で使用されるMakefile.amの最上位にACLOCAL_AMFLAGS = -I m4 --installを追加します。それはこのような良いマクロだ理由はここに

    です:これは、個々のブーストコンポーネントの場合など、AC_SUBSTに使用し、あなたがCPPFLAGSに追加できる

    BOOST_CPPFLAGSを定義します

    BOOST_REQUIRE([1.54],[ACTION-IF-NOT-FOUND]) 
    

    、それを指定することが可能ですデバッグビルド、静的ビルドなどがありますが、(通常)マルチスレッドの動的ライブラリが最適です(例:

    BOOST_FILESYSTEM([mt]) 
    

    BOOST_FILESYSTEM_LIBSBOOST_FILESYSTEM_LDFLAGSを定義します。ライブラリが依存している場合は別のボーナスとして、あなただけのブーストのインストールがなく、必要であることを指定する必要がありますなど


    、Boost.Systemは、これらのライブラリの依存関係を自動的にLIBSLDFLAGSに追加されている、と言いますそれを配布しようとしています。ソースから、またはプリコンパイルされたパッケージから簡単にビルドしてインストールできます。前者は長い時間がかかりますが、システムに最適化されたビルドを持つことが最善です。 Boostの実装(堅牢で最適化された)を利用できる多くのソフトウェアがあります。

    使用可能なバージョンがない場合は、BOOST_REQUIREエラーメッセージを使用してください。

    15

    The Archiveは、AX_BOOST_*を有する。

    私はしばらくの間boost.m4に切り替えましたが、非常に遅く、boost.m4が2番目のライブラリのテストを終える前にvimで手で完全なBoostパスを使ってMakefileを編集できました。

    私はアーカイブに戻って、ブーストマクロが再びアクティブに維持されていることを知ってうれしかったです。私は私のプロジェクトのすべてからboost.m4をパージすることに進みました。 (ax_boost _ *を想定M4ファイルがサブディレクトリのM4である。)ユースケースから

    関連抜粋:

    ./bootstrap

    aclocal -I m4 --install 
    ... 
    

    ./configure.ac

    ... 
    AC_CONFIG_MACRO_DIR([m4]) 
    ... 
    AX_BOOST_BASE([1.48],, [AC_MSG_ERROR([libfoo needs Boost, but it was not found in your system])]) 
    AX_BOOST_SYSTEM 
    AX_BOOST_FILESYSTEM 
    ... 
    

    ./Makefile.am

    ACLOCAL_AMFLAGS = -I m4 
    EXTRA_DIST = bootstrap ... 
    SUBDIRS = ... src ... 
    ... 
    

    ./src/Makefile.am

    AM_CPPFLAGS = \ 
        ... \ 
        $(BOOST_CPPFLAGS) \ 
        ... 
    
    ... 
    
    AM_LDFLAGS = ... \ 
        $(BOOST_LDFLAGS) 
    
    ... 
    
    lib_LTLIBRARIES = libFoo.la 
    
    ... 
    
    libFoo_la_LIBADD = \ 
        ... \ 
        $(BOOST_FILESYSTEM_LIB) \ 
        $(BOOST_SYSTEM_LIB) \ 
        ... 
    
    +0

    ありがとう、AC_MSG_ERRORのカンマで問題が発生しました。それは解決したコンマを取り除いている。 – aberaud

    +0

    それから、あなたはそれを正しく引用しません( '['と ']'文字)。 – DanielKO

    関連する問題