2017-12-18 221 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