boost with Autotools

C++言語では boost ライブラリが有志で作成されており, 一部が C++ 言語の仕様に取り入れられているほどである.

しかしながら, あくまで C++ 言語で使用することを想定しているため, GNU Build System (Autotools) で configure スクリプトを作成するには工夫が必要であった.

以下, 筆者が行った作業を列挙してみる.

  1. Autoconf ArchiveThe macros から ax_boost_base の他, 必要なマクロ (ax_boost_xxx をダウンロードし, 開発パッケージの適当な場所 (以下, ./m4 ディレクトリと仮定) に保存する.
  2. configure.acAX_BOOST_BASE と, 必要に応じたマクロ (例えば, boost::iostreams を使うのならば AX_BOOST_IOSTREAMS を記載する. なお, AX_BOOST_BASE は他の AX_BOOST_xxx よりも前に記述する必要がある.
  3. Makefile.amACLOCAL_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 でコンパイルできるようになる. さらに, make dist-xx で, 上記マクロを含んだアーカイブも作成できる.

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!

コメントを残す