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>])
Выполняет заданную последовательность из одного или нескольких команд.
Команды выполняются конкурирующим образом как конвейер, при этом стандартный вывод каждого процесса направляется в стандартный ввод следующего. Единая труба стандартных ошибок используется для всех процессов.
Параметры:
-
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аргументов. Каждый элемент будет представлять собой целое возвращаемое значение соответствующего дочернего процесса или строку, описывающую ошибочное состояние. -
OUTPUT_VARIABLE, ERROR_VARIABLE -
Переменная с указанным именем будет установлена со значениями стандартных потоков вывода и ошибок соответственно. Если для обоих потоков указана одна переменная, их выводы будут объединены в порядке их получения.
-
INPUT_FILE, OUTPUT_FILE, ERROR_FILE -
Названный файл будет подключен к стандартному вводу первого процесса, стандартному выводу последнего процесса или стандартной ошибке всех процессов, соответственно.
Новое в версии 3.3: Если один и тот же файл указан для вывода и ошибок, он будет использоваться для обоих.
-
OUTPUT_QUIET, ERROR_QUIET -
Результаты стандартного вывода или стандартной ошибки будут игнорироваться.
-
COMMAND_ECHO <where> -
Новое в версии 3.15.
Выполняемая команда будет выведена в
<where>с<where>, установленным в одно из значенийSTDERR,STDOUTилиNONE. См. переменнуюCMAKE_EXECUTE_PROCESS_COMMAND_ECHOдля способа управления стандартным поведением, когда этот параметр отсутствует. -
ENCODING <name> -
Новое в версии 3.8.
В Windows, кодировка, используемая для декодирования вывода от процесса. Игнорируется на других платформах. Допустимые имена кодировок:
-
NONE -
Не выполнять декодирование. Это предполагает, что вывод процесса закодирован так же, как внутренняя кодировка CMake (UTF-8). Это значение по умолчанию.
-
AUTO -
Использовать кодовую страницу текущей активной консоли, или, если она недоступна, использовать ANSI.
-
ANSI -
Использовать кодовую страницу ANSI.
-
OEM -
Использовать кодовую страницу OEM (Original Equipment Manufacturer).
-
UTF8 or UTF-8 -
Использовать кодовую страницу UTF-8.
Новое в версии 3.11: Принимает написание
UTF-8для согласованности с соглашениями об именовании RFC UTF-8.
-
-
ECHO_OUTPUT_VARIABLE, ECHO_ERROR_VARIABLE -
Новое в версии 3.18.
Стандартный вывод или стандартная ошибка не будут исключительно перенаправлены в настроенные переменные.
Вывод будет дублироваться, он будет отправлен в настроенные переменные, а также в стандартный вывод или стандартную ошибку.
Это аналогично команде
teeUnix. -
COMMAND_ERROR_IS_FATAL <ANY|LAST> -
Новое в версии 3.19.
Параметр, следующий за
COMMAND_ERROR_IS_FATAL, определяет поведение при возникновении ошибки:ANYЕсли любая из команд в списке команд завершается ошибкой, командаexecute_process()останавливается с ошибкой.LASTЕсли последняя команда в списке команд завершается ошибкой, командаexecute_process()останавливается с ошибкой. Команды, предшествующие в списке, не приведут к фатальной ошибке.
Если для одного и того же потока указано более одного параметра OUTPUT_* или ERROR_*, приоритет не указан. Если не указаны ни OUTPUT_*, ни ERROR_*, вывод будет общим для соответствующих потоков процесса CMake.
Команда execute_process() — это новая более мощная версия exec_program(), но старая команда сохранена для совместимости. Обе команды выполняются, пока CMake обрабатывает проект до генерации системы сборки. Используйте add_custom_target() и add_custom_command() для создания пользовательских команд, выполняемых во время сборки.
© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.24/command/execute_process.html