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. - На POSIX-платформах командная строка передаётся дочернему процессу в виде массива в стиле
-
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