对 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 进行库解析?

如何通过 autoconf/automake 排除 boost 库/头文件包含问题?

《Linux内核Makefile分析》之 auto.conf, auto.conf.cmd, autoconf.h

使用 Autoconf 为 ARM 进行交叉编译

autoconf/automake:基于库存在的条件编译?

C++学习(三四四)./configuremakemake install,autoconf automake