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 的子进程将解码原始参数。

没有使用中间 shell,因此 > 等 shell 运算符被视为正常参数。(使用 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 中添加: 如果同一 <file> 的名称同时用于 OUTPUT_FILEERROR_FILE,它将同时用于标准输出和标准错误管道。

OUTPUT_QUIETERROR_QUIET

OUTPUT_VARIABLE 上的标准输出或在 ERROR_VARIABLE 上的标准错误未连接(无变量内容)。*_FILEECHO_*_VARIABLE 选项不受影响。

OUTPUT_VARIABLEERROR_VARIABLE

分别用标准输出和标准错误管道的内容设置指定的变量。如果同一变量用于设置两个管道,其输出将按照先后的顺序合并。

ECHO_OUTPUT_VARIABLEECHO_ERROR_VARIABLE

在版本 3.18 中添加。

标准输出或标准错误不会专门重定向至指定的变量。

输出将复制到指定的变量中,并仿照 tee Unix 命令一样复制到标准输出或标准错误中。

注意

如果为同一管道给出多个 OUTPUT_*ERROR_* 选项,则优先级未指定。如果没有给出任何 OUTPUT_*ERROR_* 选项,输出将与 CMake 进程本身的相应管道共享。

COMMAND_ECHO <where>

在版本 3.15 中添加。

运行的命令将被回显到 <where>,其中 <where> 被设置为 STDERRSTDOUTNONE 之一。请参阅 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 代码页。

这是默认设置。请参阅策略 CMP0176

UTF8

使用 UTF-8 代码页。不推荐使用此名称,而建议使用 UTF-8 来匹配 UTF-8 RFC 命名约定。

COMMAND_ERROR_IS_FATAL <ANY|LAST>

在 3.19 版本中添加。

COMMAND_ERROR_IS_FATAL 后的选项决定了在遇到错误时的行为

ANY 如果命令列表中的任何命令失败,execute_process() 命令将因错误而停止。

LAST 如果命令列表中的最后一个命令失败,execute_process() 命令将因错误而停止。列表中前面的命令不会导致致命错误。