CMake: для чего используется find_package (), если вам все равно нужно указать CMAKE_MODULE_PATH?
Я пытаюсь заставить кросс-платформенную систему сборки работать с использованием 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
относительно?