Spec-Zone.ru › CMake

execute_process

Запускает один или несколько дочерних процессов.

execute_process(COMMAND <cmd1> [<arguments>]
                [COMMAND <cmd2> [<arguments>]]...
                [WORKING_DIRECTORY <directory>]
                [TIMEOUT <seconds>]
                [RESULT_VARIABLE <variable>]
                [RESULTS_VARIABLE <variable>]
                [OUTPUT_VARIABLE <variable>]
                [ERROR_VARIABLE <variable>]
                [INPUT_FILE <file>]
                [OUTPUT_FILE <file>]
                [ERROR_FILE <file>]
                [OUTPUT_QUIET]
                [ERROR_QUIET]
                [COMMAND_ECHO <where>]
                [OUTPUT_STRIP_TRAILING_WHITESPACE]
                [ERROR_STRIP_TRAILING_WHITESPACE]
                [ENCODING <name>]
                [ENVIRONMENT <variable=value>...]
                [ENVIRONMENT_MODIFICATION <env-mod-op>...]
                [ECHO_OUTPUT_VARIABLE]
                [ECHO_ERROR_VARIABLE]
                [COMMAND_ERROR_IS_FATAL <ANY|LAST|NONE>])

Запускает заданную последовательность из одной или нескольких команд.

Команды выполняются одновременно в виде конвейера: стандартный вывод каждого процесса передаётся на стандартный ввод следующего. Для всех процессов используется один канал стандартного вывода ошибок.

execute_process запускает команды во время настройки проекта в CMake, до создания системы сборки. Используйте команды add_custom_target() и add_custom_command(), чтобы создать пользовательские команды, запускаемые во время сборки.

Параметры:

COMMAND

Командная строка дочернего процесса.

CMake запускает дочерний процесс напрямую с помощью API операционной системы:

  • На POSIX-платформах командная строка передаётся дочернему процессу в виде массива в стиле argv[]. Промежуточная оболочка не запускается, поэтому операторы оболочки, такие как >, рассматриваются как обычные аргументы.
  • На платформах Windows командная строка кодируется в виде строки так, чтобы дочерние процессы, использующие CommandLineToArgvW, могли восстановить исходные аргументы.

    Если команда запускает .exe, .com или другой исполняемый файл, промежуточный интерпретатор команд не запускается, поэтому операторы оболочки, такие как >, рассматриваются как обычные аргументы.

    Если команда запускает сценарий .bat или .cmd, он выполняется через интерпретатор команд cmd. Интерпретатор команд не использует CommandLineToArgvW, поэтому некоторые аргументы могут передаваться сценарию с дополнительными кавычками.

    Изменено в версии 4.0: Теперь сценарии .bat и .cmd явно выполняются через интерпретатор команд: к командной строке добавляется префикс cmd /c call. Ранее они неявно выполнялись через cmd /c без call в силу недокументированного поведения CreateProcessW.

Используйте параметры INPUT_*, OUTPUT_* и ERROR_* для перенаправления стандартных потоков ввода, вывода и вывода ошибок.

Для последовательного выполнения нескольких команд используйте несколько вызовов execute_process, каждый с одним аргументом COMMAND.

WORKING_DIRECTORY

Указанный каталог будет установлен в качестве текущего рабочего каталога дочерних процессов. Если каталог не указан, рабочий каталог дочерних процессов не определён.

TIMEOUT

По истечении указанного числа секунд (допускаются дробные значения) все незавершённые дочерние процессы будут завершены, а значение RESULT_VARIABLE будет установлено в строку с упоминанием «тайм-аута».

RESULT_VARIABLE

В переменную будет записан результат выполнения последнего дочернего процесса. Это будет целочисленный код возврата последнего дочернего процесса или строка с описанием ошибки.

RESULTS_VARIABLE <variable>

Добавлено в версии 3.10.

В переменную будет записан результат выполнения всех процессов в виде списка, разделённого точками с запятой, в порядке следования заданных аргументов COMMAND. Каждый элемент будет целочисленным кодом возврата соответствующего дочернего процесса или строкой с описанием ошибки.

INPUT_FILE <file>

<file> подключается к каналу стандартного ввода первого процесса COMMAND.

OUTPUT_FILE <file>

<file> подключается к каналу стандартного вывода последнего процесса COMMAND.

ERROR_FILE <file>

<file> подключается к каналу стандартного вывода ошибок всех процессов COMMAND.

Добавлено в версии 3.3: Если для параметров OUTPUT_FILE и ERROR_FILE указана одна и та же <file>, она будет использоваться для каналов стандартного вывода и стандартного вывода ошибок.

OUTPUT_QUIET, ERROR_QUIET

Стандартный вывод для OUTPUT_VARIABLE или стандартный вывод ошибок для ERROR_VARIABLE не подключается (содержимое переменной отсутствует). Параметры *_FILE и ECHO_*_VARIABLE не затрагиваются.

OUTPUT_VARIABLE, ERROR_VARIABLE

В указанную переменную будет записано содержимое каналов стандартного вывода и стандартного вывода ошибок соответственно. Если для обоих каналов указана одна и та же переменная, их вывод будет объединён в порядке поступления.

OUTPUT_STRIP_TRAILING_WHITESPACE, ERROR_STRIP_TRAILING_WHITESPACE

Удаляет пробельные символы в конце значений, сохранённых в соответствующих переменных OUTPUT_VARIABLE и ERROR_VARIABLE.

ECHO_OUTPUT_VARIABLE, ECHO_ERROR_VARIABLE

Добавлено в версии 3.18.

Стандартный вывод или стандартный вывод ошибок не будут перенаправляться исключительно в указанные переменные.

Вывод будет дублироваться в указанные переменные, а также в стандартный вывод или стандартный вывод ошибок, аналогично команде Unix tee.

Примечание

Если для одного и того же канала задано несколько параметров OUTPUT_* или ERROR_*, порядок приоритета не определён. Если параметры OUTPUT_* или ERROR_* не заданы, вывод будет передаваться в соответствующие каналы самого процесса CMake.

COMMAND_ECHO <where>

Добавлено в версии 3.15.

Запускаемая команда будет выведена в <where>, причём значение <where> будет одним из следующих: STDERR, STDOUT или NONE. О том, как управлять поведением по умолчанию, если этот параметр не указан, см. переменную CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.

ENCODING <name>

Добавлено в версии 3.8.

В Windows — кодировка, используемая для декодирования вывода процесса. На других платформах игнорируется. Допустимые названия кодировок:

NONE

Не выполнять декодирование. Предполагается, что вывод процесса закодирован так же, как внутренняя кодировка CMake (UTF-8).

Это значение использовалось по умолчанию в CMake 3.14 и более ранних версиях.

AUTO

Использовать кодовую страницу текущей активной консоли, а если она недоступна — ANSI.

Это значение использовалось по умолчанию в CMake с версии 3.15 по 3.30.

ANSI

Использовать кодовую страницу ANSI.

OEM

Использовать кодовую страницу изготовителя оригинального оборудования (OEM).

UTF-8

Добавлено в версии 3.11.

Использовать кодовую страницу UTF-8.

Это значение используется по умолчанию начиная с CMake 3.31. См. политику CMP0176.

UTF8

Использовать кодовую страницу UTF-8. Не рекомендуется использовать это название; предпочтительнее UTF-8, соответствующее соглашению об именовании в RFC для UTF-8.

ENVIRONMENT <variable=value>...

Добавлено в версии 4.4.

Добавить определения переменных окружения в окружение дочерних процессов. Каждая запись должна иметь вид NAME=value и интерпретируется как присваивание значения value переменной NAME на время вызова execute_process().

Эти записи обрабатываются по порядку. Если одно и то же имя переменной указано несколько раз, используется последнее значение.

ENVIRONMENT_MODIFICATION <env-mod-op>...

Добавлено в версии 4.4.

Применить к окружению дочерних процессов одну или несколько операций ENVIRONMENT_MODIFICATION. Каждая операция применяется в указанном порядке; ошибки разбора операции считаются ошибками.

Если заданы оба параметра, изменения окружения применяются после записей ENVIRONMENT.

COMMAND_ERROR_IS_FATAL <ANY|LAST|NONE>

Добавлено в версии 3.19.

Параметр, следующий за COMMAND_ERROR_IS_FATAL, определяет поведение при возникновении ошибки:

ANY

Если какая-либо команда из списка команд завершается с ошибкой, команда execute_process() останавливается с ошибкой.

LAST

Если последняя команда в списке команд завершается с ошибкой, команда execute_process() останавливается с ошибкой. Более ранние команды в списке не приводят к фатальной ошибке.

NONE

Добавлено в версии 4.0.

Независимо от того, завершаются ли какие-либо команды с ошибкой, команда execute_process() не будет останавливаться с ошибкой.

Добавлено в версии 4.0: Если параметр не указан, проверяется переменная CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL. Если переменная не задана, по умолчанию используется NONE. Если указан RESULT_VARIABLE или RESULTS_VARIABLE, переменная CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL игнорируется.

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/execute_process.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API