Я пытаюсь создать систему сборки кросс-plattform, использующую 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
и т.д.
My 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
относительно?