我正在尝试使用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。这可能是个什么问题?
提前多多感谢。
答案 0 :(得分:0)
GNU Autoconf Archive和boost::date-time的boost::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这样的依赖项。