对 C++ 库进行 autoconf 搜索
Posted
技术标签:
【中文标题】对 C++ 库进行 autoconf 搜索【英文标题】:Making autoconf search for C++ libraries 【发布时间】:2011-11-27 23:19:30 【问题描述】:我正在编写我的第一个 configure.ac,需要搜索一个 C++ 库。
我尝试了以下行,但是当运行配置脚本时,它什么也没找到。
AC_SEARCH_LIBS([xmlpp::Document::get_root_node], [xml++-2.6])
它可能有问题。那么,如何让 autoconf 查找 C++ 库?我不想提供一个全局方法(也不认为 libxml++ 有一个)。
【问题讨论】:
警告:不要在新项目中使用自动工具!在被问到 8 年后,这在标准自动工具中仍然是不可能的。正确答案是***.com/a/8289995/685984 【参考方案1】:您可能想从Autoconf macro archive 尝试AX_CXX_CHECK_LIB。您可能应该确保使用AC_LANG([C++])
或使用AC_LANG_PUSH([C++])
和AC_LANG_POP([C++])
包围呼叫。
【讨论】:
顺便说一句(因此,不是我回答的一部分),许多库支持pkg-config
,使用PKG_CHECK_MODULES
宏。我建议从Autotools Mythbuster 阅读以下内容以获取更多信息【参考方案2】:
这个链接是关于为库找到一个 C 风格的签名函数,以便它可以被 autoconf 测试或编写你自己的测试:
https://nerdland.net/2009/07/detecting-c-libraries-with-autotools/
也许值得一试,但 AC_LANG_PROGRAM 宏出现错误。问题在于将 -llibname 放在 foo.cpp 文件之前。我的编译器关心 -l 和 cpp 文件的顺序。链接器将无法在库中找到该函数。
【讨论】:
【参考方案3】:希望这会有所帮助。我的建议是使用 CMake 而不是 Autoconf。
这个 CMakeLists.txt 文件应该可以帮助您入门:
cmake_minimum_required(VERSION 2.8)
# http://www.cmake.org/cmake/help/cmake-2-8-docs.html#module:FindLibXml2
find_package(libxml2 2.6 REQUIRED) # http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:find_package
include_directories($LIBXML2_INCLUDE_DIR) # http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:include_directories
add_executable(myApp main.cpp other.cpp) # http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:add_executable
target_link_libraries(myApp $LIBXML2_LIBRARIES) # http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:target_link_libraries
要使用该文件,当然要针对您的项目进行调整。将其作为 CMakeLists.txt 放入您的 Source 目录中,然后:
mkdir build
cd build
cmake .. # This is like autoconf and generates the make files
make
如果这听起来很有趣,请查看巨大的 youtube 视频,了解所有好处:http://www.youtube.com/watch?v=8Ut9o4OdSC0
在一个项目中同时使用 CMake、CTest、CDash 和 CPack 很好。
【讨论】:
老实说,CMake 很糟糕,但它比 Autoconf 糟糕得多,这使它成为今天的日期 autoconf 替代品,所以 +1 谢谢,我也会考虑作为一个可能的选择。 实际上 AC_SEARCH_LIB 所做的并没有在你的 CMakefile 中完成,验证 libxml++ 包含符号 xmlpp::Document::get_root_node 这个答案与原问题无关 我赞成这个,因为它是正确的答案。发帖人说他们正在编写他们的第一个 configure.ac,对于其中的任何问题,唯一的答案是如果可以避免的话,不要使用 autoconf! 永远,永远永远不要将 autotools 用于新的项目!我有近10年的Autotools经验,听我的,不要这样做!!!!以上是关于对 C++ 库进行 autoconf 搜索的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 autoconf/automake 排除 boost 库/头文件包含问题?