2017-12-18 186 views
0

在我的系统(Fedora 26)上,我使用yum(又名dnf)安装了XercesC。所述XercesC头文件位于
CMake FindXercesC.cmake没有找到我的XercesC

/usr/include/xercesc-2.7.0/xercesc

和库是

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

我已经试过官方FindXercesC.cmake以及一些这个包取景器的发布版本。我也尝试了许多编辑*.cmake文件。他们都不能找到XercesC,我不得不求助于手动输入标题和库的位置。

是否有一个XercesC的CMake包发现器,可以在我的系统上自动定位XercesC?

+0

如果您没有发布cmake代码,很难弄清楚发生了什么。 –

+1

目录'/ usr/include/xercesc-2.7.0'绝对不是默认包含路径。不知道为什么Fedora选择在那里安装软件包。通过设置[CMAKE_INCLUDE_PATH](https://cmake.org/cmake/help/v3.7/variable/CMAKE_INCLUDE_PATH.html)变量(从命令行或在脚本中)提示CMake。另外,你应该有一个没有* so版本的库,可以被CMake检测到。将**精确错误消息**添加到问题文章中。 – Tsyvarev

+0

谢谢。没有如此版本的库位于/usr/lib64/xercesc-2.7.0。将CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH变量设置为适当的目录解决了问题。 – jsnark

回答

1

通常情况下,CMake搜索的东西只在默认目录中。例如,/usr/include目录会自动搜索头文件。

但是目录/usr/include/xercesc-2.7.0不是CMake的默认值(它也不是编译器的默认值),所以CMake在没有明确提示的情况下找不到东西。为了提示CMake关于include目录的搜索,设置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只能找到没有的版本,因此版本号为,所以它找不到文件/usr/lib64/libxerces-c.so.27。找到一个文件/usr/lib64/xercesc-2.7.0/libxerces-c.so你需要提示CMake CMAKE_LIBRARY_PATH变量。


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

通过pkg-config搜索可以pkg_check_modulesCONFIG模式可以在本选项添加到通话find_package(XercesC),或者干脆删除FindXercesC.cmake脚本来执行,使用find_package