C++ 对C+进行自动匹配搜索+;图书馆

C++ 对C+进行自动匹配搜索+;图书馆,c++,autoconf,C++,Autoconf,我正在编写我的第一个配置文件.ac,需要搜索一个C++库。 我尝试了下面的一行,但是当运行configure脚本时,它什么也找不到 AC_SEARCH_LIBS([xmlpp::Document::get_root_node], [xml++-2.6]) 可能是出了什么问题。那么,我怎么才能让AutoCF查找C++库呢?我不想提供全局方法(也不认为libxml++有全局方法)。希望这有帮助。我的建议是使用CMake而不是Autoconf 这个CMakeLists.txt文件应该让您开始: cm

我正在编写我的第一个配置文件.ac,需要搜索一个C++库。 我尝试了下面的一行,但是当运行configure脚本时,它什么也找不到

AC_SEARCH_LIBS([xmlpp::Document::get_root_node], [xml++-2.6])

可能是出了什么问题。那么,我怎么才能让AutoCF查找C++库呢?我不想提供全局方法(也不认为libxml++有全局方法)。

希望这有帮助。我的建议是使用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放入源目录,然后:

mkdir build
cd build
cmake .. # This is like autoconf and generates the make files
make
如果听起来很有趣,请查看youtube上的巨大视频,了解所有好处:


在一个项目中同时使用CMake、CTest、CDash和CPack是很好的选择。

您可能希望从中尝试。您可能应该确保使用
AC_LANG([C++])
或使用
AC_LANG_PUSH([C++])
AC_LANG_POP([C++])

此链接是关于查找库中的C风格签名函数,以便可以通过autoconf对其进行测试或编写您自己的测试:


也许值得一试,但我在AC_LANG_程序宏中遇到了一个错误。问题是将-llibname放在foo.cpp文件之前。我的编译器关心-l和cpp文件的顺序。链接器将无法在库中找到该函数。

CMake很糟糕,老实说,但它比Autoconf糟糕得多,这使得它成为今天的日期Autoconf的替代品,因此+1谢谢你,我也将研究它作为一个可能的选择。实际上,AC_SEARCH_库所做的事情并没有在你的CMakefile中完成,验证libxml++是否包含符号xmlpp::Document::get_root_node此答案与原始问题无关我对此进行了投票,因为它是正确的答案。海报上说他们正在写他们的第一个configure.ac,如果你可以避免的话,任何问题的唯一答案就是不要使用autoconf!永远不要,永远不要在新项目中使用自动工具!我有近10年的自动工具经验,听我说,不要这样做!!!!顺便说一句(因此,不是我答案的一部分),许多库使用
pkg\u CHECK\u MODULES
宏支持
pkg config
。我建议阅读以下内容以了解更多信息警告:不要在新项目中使用自动工具!在标准的autotools中,这在被询问8年后仍然是不可能的。正确答案是