CMake FindXercesC.cmake 找不到我的 XercesC

jsn*_*ark 3 c++ cmake xerces

在我的系统(Fedora 26)上,我使用 yum(又名 dnf)安装了 XercesC。XercesC 头文件位于

/usr/include/xercesc-2.7.0/xercesc

图书馆是

/usr/lib64/libxerces-c.so.27。

我已经尝试过FindXercesC.cmake该软件包查找器的官方版本以及许多发布的版本。我还尝试对发布的文件进行多次编辑*.cmake。他们都无法找到 XercesC,我必须手动输入标头和库的位置。

是否有适用于 XercesC 的 CMake 包查找器可以自动在我的系统上找到 XercesC?

Tsy*_*rev 5

通常,CMake 仅在默认目录中搜索内容。例如,/usr/include会自动在目录中搜索头文件。

但目录/usr/include/xercesc-2.7.0不是 CMake 的默认目录(也不是编译器的默认目录),因此如果没有明确的提示,CMake 无法在其中找到内容。有关要搜索的包含目录的 CMake 提示,请设置CMAKE_INCLUDE_PATH变量。例如,通过命令行:

cmake -DCMAKE_INCLUDE_PATH=/usr/include/xercesc-2.7.0 <other_params>
Run Code Online (Sandbox Code Playgroud)

搜索库文件也是如此:CMake 会自动搜索 下的库/usr/lib64/,但不会搜索/usr/lib64/xercesc-2.7.0. 另外,CMake只能找到没有so-version的库,因此它找不到文件/usr/lib64/libxerces-c.so.27。要查找文件,您需要使用CMAKE_LIBRARY_PATH/usr/lib64/xercesc-2.7.0/libxerces-c.so变量提示 CMake 。


根据xercesc 的消息pkg-config,它支持通过和 通过CONFIG模式搜索包find_package。也许,这些变体不需要额外的提示。

可以使用pkg_check_modulespkg-config执行搜索,要在CONFIG模式下使用,可以将此选项添加到 call 中,或者只需删除脚本。find_packagefind_package(XercesC)FindXercesC.cmake