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 eine, find_package()die eine Find*.cmakeDatei öffnet und nach der Bibliothek im System sucht und einige Variablen wie SomeLib_FOUNDusw. definiert .
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 sucht, Find*.cmakeund ich habe das Verzeichnis hinzugefügt, SomeLibin dem FindSomeLib.cmakedas gefunden werden kann, damit es find_package()wie erwartet funktioniert.
Dies ist jedoch etwas seltsam, da einer der Gründe dafür darin find_package()besteht, sich von nicht codierungsübergreifenden, hartcodierten Pfaden zu entfernen.
Wie wird das normalerweise gemacht? Soll ich das cmake/Verzeichnis von SomeLibin mein Projekt kopieren und das CMAKE_MODULE_PATHrelativ einstellen ?