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!