find_program
Короткая сигнатура:
find_program (<VAR> name1 [path1 path2 ...])
Общая сигнатура:
find_program (
<VAR>
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_PACKAGE_ROOT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
) Эта команда используется для поиска программы. В кэше создаётся запись, обозначенная как <VAR>, для хранения результата этой команды. Если программа найдена, результат сохраняется в переменной, и поиск не будет повторяться, если только переменная не будет очищена. Если ничего не найдено, результат будет <VAR>-NOTFOUND, и поиск будет предпринят снова в следующий раз, когда find_program будет вызван с той же переменной.
Опции включают:
-
NAMES -
Укажите одно или несколько возможных имён для программы.
При использовании для указания имён с и без суффикса версии, рекомендуется сначала указать имя без версии, чтобы локально скомпилированные пакеты находились перед пакетами, предоставленными дистрибутивами.
-
HINTS, PATHS -
Укажите каталоги для поиска помимо стандартных расположений. Опция
ENV varсчитывает пути из переменной среды системы. -
PATH_SUFFIXES -
Укажите дополнительные подкаталоги для проверки под каждым каталогом, который в противном случае рассматривается.
-
DOC -
Укажите строку документации для записи в кэше
<VAR>.
Если NO_DEFAULT_PATH указано, то дополнительные пути к поиску не добавляются. Если NO_DEFAULT_PATH не указано, процесс поиска выполняется следующим образом:
-
Если вызвана из модуля поиска или любого другого скрипта, загруженного вызовом
find_package(<PackageName>), искать префиксы, уникальные для текущего искомого пакета. В частности, искать в переменной CMake<PackageName>_ROOTи переменной среды<PackageName>_ROOT. Переменные корня пакета поддерживаются как стек, поэтому если вызов осуществляется из вложенных модулей поиска или конфигурационных пакетов, пути корня из родительского модуля поиска или конфигурационного пакета будут проверяться после путей текущего модуля или пакета. Другими словами, порядок поиска будет<CurrentPackage>_ROOT,ENV{<CurrentPackage>_ROOT},<ParentPackage>_ROOT,ENV{<ParentPackage>_ROOT}, и т.д. Это можно пропустить, если переданоNO_PACKAGE_ROOT_PATHили установленоCMAKE_FIND_USE_PACKAGE_ROOT_PATHв значениеFALSE. См. политикуCMP0074.-
<prefix>/[s]binдля каждого<prefix>в переменной CMake<PackageName>_ROOTи переменной среды<PackageName>_ROOT, если вызов осуществляется из модуля поиска, загруженногоfind_package(<PackageName>)
-
-
Проверить пути, указанные в переменных кэша CMake. Они предназначены для использования в командной строке с
-DVAR=value. Значения интерпретируются как списки, разделенные точкой с запятой. Это можно пропустить, если переданоNO_CMAKE_PATHили установленоCMAKE_FIND_USE_CMAKE_PATHв значениеFALSE.-
<prefix>/[s]binдля каждого<prefix>вCMAKE_PREFIX_PATH CMAKE_PROGRAM_PATHCMAKE_APPBUNDLE_PATH
-
-
Проверить пути, указанные в переменных среды CMake. Они предназначены для установки в конфигурации оболочки пользователя, поэтому используют системный разделитель путей (
;в Windows и:в UNIX). Это можно пропустить, если переданоNO_CMAKE_ENVIRONMENT_PATHили установленоCMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATHв значениеFALSE.-
<prefix>/[s]binдля каждого<prefix>вCMAKE_PREFIX_PATH CMAKE_PROGRAM_PATHCMAKE_APPBUNDLE_PATH
-
- Проверить пути, указанные параметром
HINTS. Они должны быть путями, вычисленные путём определения системы, такие как подсказка, предоставленная расположением другого уже найденного элемента. Жестко заданные предположения следует указать с помощью параметраPATHS. -
Проверить стандартные переменные среды.
Это можно пропустить, если передано
NO_SYSTEM_ENVIRONMENT_PATHили установленоCMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATHв значениеFALSE.- Каталоги в самом
PATH. - В системах Windows дополнительные пути к поиску не включены
- Каталоги в самом
-
Проверить переменные CMake, определённые в файлах платформы для текущей системы.
Это можно пропустить, если передано
NO_CMAKE_SYSTEM_PATHили установленоCMAKE_FIND_USE_CMAKE_SYSTEM_PATHв значениеFALSE.-
<prefix>/[s]binдля каждого<prefix>вCMAKE_SYSTEM_PREFIX_PATH CMAKE_SYSTEM_PROGRAM_PATHCMAKE_SYSTEM_APPBUNDLE_PATH
-
- Проверить пути, указанные в опции PATHS или в короткой версии команды. Обычно это жёстко заданные предположения.
В macOS переменные CMAKE_FIND_FRAMEWORK и CMAKE_FIND_APPBUNDLE определяют порядок предпочтения между компонентами пакета в стиле Apple и стиле Unix.
Переменная CMake CMAKE_FIND_ROOT_PATH указывает один или несколько каталогов, которые будут добавлены в начало всех других каталогов поиска. Это эффективно «переопределяет» весь поиск в указанных местах. Пути, которые являются потомками переменной CMAKE_STAGING_PREFIX, исключаются из этого переопределения, поскольку эта переменная всегда является путём на системной машине. По умолчанию CMAKE_FIND_ROOT_PATH пустая.
Переменная CMAKE_SYSROOT также может быть использована для указания ровно одного каталога для использования в качестве префикса. Установка CMAKE_SYSROOT также имеет другие эффекты. Смотрите документацию по этой переменной для получения дополнительной информации.
Эти переменные особенно полезны при кросс-компиляции для указания корневого каталога целевой среды, и CMake будет искать там тоже. По умолчанию сначала проверяются каталоги, перечисленные в CMAKE_FIND_ROOT_PATH, затем каталог CMAKE_SYSROOT, а затем не-корневые каталоги будут проверяться. Поведение по умолчанию можно настроить, установив CMAKE_FIND_ROOT_PATH_MODE_PROGRAM. Это поведение можно вручную переопределить для каждого вызова с помощью опций:
-
CMAKE_FIND_ROOT_PATH_BOTH -
Искать в порядке, описанном выше.
-
NO_CMAKE_FIND_ROOT_PATH -
Не используйте переменную
CMAKE_FIND_ROOT_PATH. -
ONLY_CMAKE_FIND_ROOT_PATH -
Искать только перебазированные каталоги и каталоги ниже
CMAKE_STAGING_PREFIX.
По умолчанию порядок поиска предназначен для наиболее специфичных к наименее специфичным случаев обычного использования. Проекты могут переопределить порядок, просто вызвав команду несколько раз и используя параметры NO_*:
find_program (<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH) find_program (<VAR> NAMES name)
После того, как одно из вызовов завершится успешно, переменная результата будет установлена и сохранена в кэше, так что ни один вызов не будет искать снова.
Когда более чем одно значение задается для параметра NAMES , эта команда по умолчанию будет рассматривать одно имя за раз и искать его в каждом каталоге. Параметр NAMES_PER_DIR сообщает этой команде рассматривать один каталог за раз и искать в нем все имена.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/command/find_program.html