boost with Autotools
C++言語では boost ライブラリが有志で作成されており, 一部が C++ 言語の仕様に取り入れられているほどである.
しかしながら, あくまで C++ 言語で使用することを想定しているため, GNU Build System (Autotools) で configure スクリプトを作成するには工夫が必要であった.
以下, 筆者が行った作業を列挙してみる.
- Autoconf Archive のThe macros から ax_boost_base の他, 必要なマクロ (
ax_boost_xxxをダウンロードし, 開発パッケージの適当な場所 (以下,./m4ディレクトリと仮定) に保存する. configure.acにAX_BOOST_BASEと, 必要に応じたマクロ (例えば,boost::iostreamsを使うのならばAX_BOOST_IOSTREAMSを記載する. なお,AX_BOOST_BASEは他のAX_BOOST_xxxよりも前に記述する必要がある.Makefile.amにACLOCAL_AMFLAGS = -I ./m4,AM_CPPFLAGS = @BOOST_CPPFLAGS@,AM_LDFLAGS = @BOOST_LDFLAGS@及びprogram_LDADD = @BOOST_xxx_LIB@を記載する. (xxx は BOOST ライブラリ名)
これで, aclocal && autoheader && autoconf && automake && ./configure とすれば configure スクリプトが出来上がり, make でコンパイルできるようになる. さらに,
Msys2 で扱う Mingw の BOOST パッケージでは, 明示的に configure スクリプトにライブラリの場所を提示しなければならないようだ. つまり, コンパイルをするときに ./configure --with-boost-libdir=/mingw64/lib
などといったオプションをつける必要がある. これを忘れると, なぜかコンパイラがライブラリの場所を探せなくて下記のようなエラーが表示されてしまう.
- checking for boostlib >= 1.20.0… yes
- checking whether the Boost::IOStreams library is available… yes
- configure: error: Could not find a version of the library!
