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>]
[ECHO_OUTPUT_VARIABLE]
[ECHO_ERROR_VARIABLE]
[COMMAND_ERROR_IS_FATAL <ANY|LAST>])
Выполняет заданную последовательность из одного или нескольких команд.
Команды выполняются параллельно как конвейер, при этом стандартный вывод каждого процесса передаётся в стандартный ввод следующего. Единая труба стандартной ошибки используется для всех процессов.
execute_process выполняет команды во время конфигурирования проекта CMake перед генерацией системы сборки. Используйте команды add_custom_target() и add_custom_command() для создания пользовательских команд, которые выполняются во время сборки.
Параметры:
-
COMMAND -
Строка команд дочернего процесса.
CMake выполняет дочерний процесс, напрямую используя API операционной системы:
- На платформах POSIX строка команд передаётся дочернему процессу в массиве типа
argv[]. - На платформах Windows строка команд кодируется как строка таким образом, чтобы дочерние процессы, использующие
CommandLineToArgvW, смогли декодировать исходные аргументы.
Не используется промежуточный интерпретатор команд, поэтому операторы оболочки, такие как
>, обрабатываются как обычные аргументы. (Используйте параметрыINPUT_*,OUTPUT_*, иERROR_*для перенаправления stdin, stdout и stderr.)Для последовательного выполнения нескольких команд используйте несколько вызовов
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: Если одноимённый <file> указан как для OUTPUT_FILE, так и для ERROR_FILE, то он будет использоваться для обоих труб стандартного вывода и стандартной ошибки.
-
OUTPUT_QUIET, ERROR_QUIET -
Стандартный вывод на
OUTPUT_VARIABLEили стандартная ошибка наERROR_VARIABLEне подключены (содержимое переменной отсутствует). Параметры*_FILEиECHO_*_VARIABLEне затрагиваются. -
OUTPUT_VARIABLE, ERROR_VARIABLE -
Названная переменная будет содержать содержимое труб стандартного вывода и стандартной ошибки соответственно. Если одна и та же переменная указана для обеих труб, их вывод будет объединён в порядке их вывода.
-
ECHO_OUTPUT_VARIABLE, ECHO_ERROR_VARIABLE -
Добавлена в версии 3.18.
Стандартный вывод или стандартная ошибка не будут исключительно перенаправлены в указанные переменные.
Вывод будет продублирован в указанные переменные и также в стандартный вывод или стандартную ошибку аналогично команде
teeUnix.
Примечание
Если для одной трубы указано более одного параметра 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 (Original Equipment Manufacturer).
-
UTF-8 -
Добавлена в версии 3.11.
Использовать кодовую страницу UTF-8.
Это значение по умолчанию. См. политику
CMP0176. -
UTF8 -
Использовать кодовую страницу UTF-8. Использование этого имени не рекомендуется в пользу
UTF-8, чтобы соответствовать соглашению об именовании RFC UTF-8 UTF-8 RFC.
-
-
COMMAND_ERROR_IS_FATAL <ANY|LAST> -
Добавлена в версии 3.19.
Параметр, следующий за
COMMAND_ERROR_IS_FATAL, определяет поведение при возникновении ошибки:ANYЕсли любая из команд в списке команд завершается ошибкой, командаexecute_process()завершается с ошибкой.LASTЕсли последняя команда в списке команд завершается ошибкой, командаexecute_process()завершается с ошибкой. Команды, предшествующие в списке, не приведут к фатальной ошибке.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/command/execute_process.html