Подсказка Найти<name>.cmake Files с пользовательским каталогом
В CMake, есть ли способ сделать встроенные скрипты Find для определения приоритетов пользовательского каталога, который мы указываем? Потому что, особенно в Windows, сценарии поиска модулей обычно не могут обнаружить модуль, например, в каталогах Visual Studio. Поэтому мне обычно приходится вручную устанавливать пути для внешних библиотек, что довольно утомительно. Вместо этого я хочу, чтобы эти скрипты выглядели в пользовательском каталоге, скажем, вначале, в папке основного проекта, в папке "зависимости", чтобы я мог напрямую поместить эти внешние объекты в эту папку, что гораздо проще, чем поместить их в папку VC или вручную установить пути.
1 ответ
Установка переменной CMAKE_PREFIX_PATH служит именно этим целям: find_*
функция о местонахождении искомого предмета.
Пока описание этой переменной не замечает find_package
функция, переменная влияет на нее косвенно: большинство Find<name>.cmake
скрипты используют функции find_library и find_path. Обратите внимание, что все find_*
функции имеют точный алгоритм для поиска элементов, а пути построены с CMAKE_PREFIX_PATH
проверяются перед системными.
Более того, CMAKE_PREFIX_PATH
влияет на некоторые другие процедуры поиска. Например, если пакет 3d party предоставляет <name>Config.cmake
сценарий вместо Find<name>.cmake
Во-первых, этот скрипт также ищется с использованием этой переменной. pkg_check_modules также использует CMAKE_PREFIX_PATH
для поиска .pc
файлы, описанные в пакете.
CMAKE_PREFIX_PATH
переменная может быть установлена как среда один (в зависимости от платформы и в зависимости от использования), в качестве параметра cmake
вызов:
cmake -DCMAKE_PREFIX_PATH=<additional-path> <other-parameters>
или в пределах CMakeLists.txt
файл. В последнем случае лучше добавлять поисковые каталоги, чтобы пользовательский пакет мог также установить переменную для поисковых пакетов, не поставляемых с вашим проектом:
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/dependencies")