Я пытаюсь заставить кросс-платформенную систему сборки работать с использованием CMake. Теперь у программного обеспечения есть несколько зависимостей. Я сам скомпилировал их и установил в своей системе.
Некоторые примеры файлов, которые были установлены:
-- 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
Теперь в CMake есть файл, find_package()
который открывает Find*.cmake
файл и ищет библиотеку в системе и определяет некоторые переменные, например, SomeLib_FOUND
и т. Д.
Мой CMakeLists.txt содержит что-то вроде этого:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
Первая команда определяет, где CMake ищет после, Find*.cmake
и я добавил каталог, SomeLib
где FindSomeLib.cmake
можно найти, поэтому find_package()
работает как положено.
Но это немного странно, потому что одна из причин, по которой это происходит, find_package()
заключается в том, чтобы уйти от жестко-закодированных путей без кроссплатформенности.
Как это обычно делается? Должен ли я скопировать cmake/
каталог SomeLib
в мой проект и установить CMAKE_MODULE_PATH
относительно?