Autoreconf更好的方法来查找Boost :: Date-time

时间:2013-06-21 17:13:40

标签: boost autotools autoconf

我正在尝试使用autotools编译一些代码,并且在尝试包含boost :: date-time和boost :: regex时遇到困难。我得到了一个configure.in文件,用于定义以这种方式查找boost :: date-time

AC_CHECK_LIB(boost_date_time-gcc-mt, main, , [
        AC_CHECK_LIB(boost_date_time-mt, main, , [
                AC_CHECK_LIB(boost_date_time, main, , [
                        AC_MSG_ERROR("Linking against boost::date-time library failed.")])
        ])
])

这似乎是根据谷歌的标准方式。但是当我运行autoreconf时:

$ autoreconf -f -s -i
libtoolize: putting auxiliary files in `.'.
libtoolize: linking file `./ltmain.sh'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.

和./configure:

$ CXXFLAGS="-g -w" ./configure --prefix=$INSTALL_PATH
...
checking for main in -lboost_date_time-gcc-mt... no
checking for main in -lboost_date_time-mt... no
checking for main in -lboost_date_time... no
configure: error: "Linking against boost::date-time library failed."

无法找到。我知道他们在那里,因为我从头开始编译boost 1.53。这可能是个什么问题?

提前多多感谢。

2 个答案:

答案 0 :(得分:0)

GNU Autoconf Archiveboost::date-timeboost::regex都有宏。也许他们会更合适。

  

无法找到。我知道他们在那里,因为我从头开始编译boost 1.53。这可能是个什么问题?

您必须先咨询config.log才能确定。由于您正在寻找这些库中的main函数(这些函数不在这些库中,但这是另一个问题),AC_CHECK_LIB测试会生成invalid C++ code,这可能是您的问题

答案 1 :(得分:0)

有一个很棒的boost.m4宏。您可以将其复制到顶级./m4目录中。

    AC_CONFIG_MACRO_DIR([m4])

  • configure.ac 顶级ACLOCAL_AMFLAGS = -I m4 --install

  • 中的
  • Makefile.am

  • 使用aclocal

  • 调用aclocal -I m4 --install

configure.ac中使用结果非常容易,例如,对于Boost.Filesystem:

BOOST_REQUIRE([1.53], [ACTION-IF-NOT-FOUND])
AC_SUBST(BOOST_CPPFLAGS)
MY_PROJECT_CPPFLAGS+="$BOOST_CPPFLAGS"

BOOST_FILESYSTEM([mt])
AC_SUBST(BOOST_FILESYSTEM_LIBS)
AC_SUBST(BOOST_FILESYSTEM_LDFLAGS)
MY_PROJECT_LIBFLAGS+="$BOOST_FILESYSTEM_LDFLAGS $BOOST_FILESYSTEM_LIBS"

它甚至会添加像Boost.System这样的依赖项。