Как указать команде find_pakage по какому адресу искать библиотеку в cmake?
Как указать команде find_pakage по какому адресу искать библиотеку в cmake? Проблема в том, что библbотека установлена не в usr/local и find_package не знает где ее искать, как указать путь к директории, содержащей библиотеку для find_package?
Ответы (1 шт):
Есть три способа указать CMake на место, где искать библиотеку через find_package:
Добавить в переменную
CMAKE_PREFIX_PATHустановочную директорию библиотеки. Например, если библиотека ставилась с установочным префиксом/home/me/install, то можно либо вызыватьcmakeс дополнительным параметром:cmake -DCMAKE_PREFIX_PATH=/home/me/install <... остальные параметры cmake>либо установить переменную среды перед вызовом
cmake:export CMAKE_PREFIX_PATH=/home/me/install cmake <...>Найти конфигурационный файл библиотеки XXX (
XXXConfig.cmakeилиxxx-config.cmake) и указать его директорию в переменнойXXX_DIR. Например, если конфигурационный файл библиотеки Foo имеет полный путь/home/me/install/share/cmake/FooConfig.cmake, то можно либо передатьcmakeдополнительный параметр:cmake -DFoo_DIR=/home/me/install/share/cmake <...>либо установить аналогичную переменную среды перед вызовом
cmake:export Foo_DIR=/home/me/install/share/cmake cmake <...>Установить переменную
XXX_ROOTравной установочной директории библиотеки. Например, если библиотека Foo ставилась с установочным префиксом/home/me/install, то можно либо вызыватьcmakeс дополнительным параметром:cmake -DFoo_ROOT=/home/me/install <...>либо установить переменную среды перед вызовом
cmake:export Foo_ROOT=/home/me/install cmake
Способ с установкой переменной CMAKE_PREFIX_PATH достаточно универсален: он влияет сразу на все библиотеки, которые ищутся, а также влияет на поиск библиотек с использованием "Find" скриптов. (Остальные способы влияют только на поиск "Config" скриптов).
Установкой переменной XXX_DIR можно повлиять на поиск избирательно, только для одной библиотеки. Важно учесть, что директория XXX_DIR должна напрямую содержать "Config" скрипт и не всегда совпадает с установочной директорией для библиотеки.
Установка переменной XXX_ROOT также влияет на поиск избирательно, только для одной библиотеки. При этом эта переменная должна содержать именно установочную директорию (не обязательно искать "Config" файл в ней).
Но для проектов, нацеленных на версию CMake 3.11 и ниже, могут выдаваться предупреждения: переменная XXX_ROOT появилась только в версии CMake 3.12.