CMake FindXercesC.cmake找不到我的XercesC

时间:2017-12-18 03:17:24

标签: c++ cmake xerces

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

  

/usr/include/xercesc-2.7.0/xercesc

,图书馆是

  

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

我尝试了官方FindXercesC.cmake以及此发现包的许多发布版本。我还尝试对发布的*.cmake文件进行多次编辑。他们都没有找到XercesC,我不得不手动输入标题和库的位置。

是否有XercesC的CMake软件包查找器会自动在我的系统上找到XercesC?

1 个答案:

答案 0 :(得分:1)

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

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

cmake -DCMAKE_INCLUDE_PATH=/usr/include/xercesc-2.7.0 <other_params>

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

根据xercesc sources,它支持通过pkg-configfind_package CONFIG 模式搜索包。可能这些变体不需要额外的提示。

可以使用pkg_check_modules通过pkg-config进行搜索,在 CONFIG 模式下使用find_package,可以将此选项添加到调用find_package(XercesC),或者只是删除FindXercesC.cmake脚本。