CMake: Wozu dient find_package (), wenn Sie CMAKE_MODULE_PATH angeben müssen?
Ich versuche, ein plattformübergreifendes Build-System mit CMake zum Laufen zu bringen. Jetzt hat die Software einige Abhängigkeiten. Ich habe sie selbst kompiliert und auf meinem System installiert.
Einige Beispieldateien, die installiert wurden:
-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
Jetzt hat CMake einefind_package()
das öffnet einFind*.cmake
Datei und sucht nach der Bibliothek auf dem System und definiert einige Variablen wieSomeLib_FOUND
usw.
Meine CMakeLists.txt enthält ungefähr Folgendes:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
Der erste Befehl definiert, wo CMake nach dem suchtFind*.cmake
und ich fügte das Verzeichnis vonSomeLib
bei dem dieFindSomeLib.cmake
gefunden werden kann, sofind_package()
funktioniert wie erwartet.
Aber das ist irgendwie komisch, weil einer der Gründe dafür istfind_package()
Existiert, ist es, von nicht plattformübergreifenden fest codierten Pfaden wegzukommen.
Wie wird das normalerweise gemacht? Soll ich das kopieren?cmake/
Verzeichnis vonSomeLib
in mein projekt und setze dasCMAKE_MODULE_PATH
verhältnismäßig?