Подсказка Найти<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")
Другие вопросы по тегам