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 -
Строка команд дочернего процесса.
CMake выполняет дочерний процесс напрямую с использованием системных API. Все аргументы передаются ДОЧЕРНЕМУ процессу В ТОЧНОМ ВИДЕ. Внешняя оболочка не используется, поэтому операторы оболочки, такие как
>рассматриваются как обычные аргументы. (Используйте параметрыINPUT_*,OUTPUT_*, иERROR_*для перенаправления stdin, stdout и stderr.)Если требуется последовательное выполнение нескольких команд, используйте несколько вызовов
execute_process()с одним аргументомCOMMAND. -
WORKING_DIRECTORY -
Указанная директория будет установлена в качестве текущей рабочей директории дочерних процессов.
-
TIMEOUT -
По истечении указанного количества секунд (допускаются дроби), все незавершенные дочерние процессы будут завершены, а
RESULT_VARIABLEбудет установлено со строкой, упоминающей «таймаут». -
RESULT_VARIABLE -
Переменная будет установлена в значение результата последнего дочернего процесса. Это будет целочисленный код возврата последнего дочернего процесса или строка, описывающая ошибку.
-
RESULTS_VARIABLE <variable> -
Переменная будет установлена в значение результата всех процессов в виде списка, разделенного точкой с запятой, в порядке предоставленных
COMMANDаргументов. Каждый элемент будет целочисленным кодом возврата соответствующего дочернего процесса или строкой, описывающей ошибку. -
OUTPUT_VARIABLE, ERROR_VARIABLE -
Указанная переменная будет установлена со содержимым стандартных каналов вывода и стандартных каналов ошибок соответственно. Если для обоих каналов указана одна переменная, их вывод будет объединён в порядке их генерации.
-
INPUT_FILE, OUTPUT_FILE, ERROR_FILE -
Указанный файл будет подключен к стандартному вводу первого процесса, стандартному выводу последнего процесса или стандартному выводу ошибок всех процессов соответственно. Если один и тот же файл указан для вывода и ошибок, он будет использоваться для обоих.
-
OUTPUT_QUIET, ERROR_QUIET -
Результаты стандартного вывода или стандартных ошибок будут спокойно проигнорированы.
-
COMMAND_ECHO <where> -
Выполняемая команда будет выведена в
<where>, при этом<where>будет установлено в одно из значенийSTDERR,STDOUTилиNONE. Обратитесь к переменнойCMAKE_EXECUTE_PROCESS_COMMAND_ECHOдля управления этим поведением по умолчанию, когда этот параметр отсутствует. -
ENCODING <name> -
В Windows используется кодировка для декодирования вывода процесса. Игнорируется на других платформах. Допустимые имена кодировок:
-
NONE -
Не выполнять декодирование. Предполагается, что вывод процесса закодирован так же, как внутренняя кодировка CMake (UTF-8). Это значение по умолчанию.
-
AUTO -
Используйте текущую активную кодовую страницу консоли или, если она недоступна, используйте ANSI.
-
ANSI -
Использовать кодовую страницу ANSI.
-
OEM -
Использовать кодовую страницу производителя оборудования (OEM).
-
UTF8 or UTF-8 -
Использовать кодовую страницу UTF-8. До CMake 3.11.0, для этой кодировки принималось только
UTF8. В CMake 3.11.0,UTF-8было добавлено для согласованности с соглашением об именах RFC UTF-8.
-
-
ECHO_OUTPUT_VARIABLE, ECHO_ERROR_VARIABLE -
Стандартный вывод или стандартная ошибка не будут эксклюзивно перенаправлены в заданные переменные.
Вывод будет дублироваться, он будет отправлен в заданные переменные, а также в стандартный вывод или стандартную ошибку.
Это аналогично команде Unix
tee.
Если для одного канала задано более одного параметра OUTPUT_* или ERROR_*, приоритет не определён. Если не заданы параметры OUTPUT_* или ERROR_*, вывод будет совместно использоваться с соответствующими каналами вывода и ошибок процесса CMake.
Команда execute_process() является более новой и мощной версией команды exec_program(), но старая команда сохранена для совместимости. Обе команды выполняются во время обработки проекта CMake перед генерацией системы сборки. Используйте add_custom_target() и add_custom_command() для создания пользовательских команд, которые выполняются во время сборки.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.18/command/execute_process.html