执行进程

执行一个或多个子进程。

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() 命令创建在构建时运行的自定义命令。

选项:

命令

子进程命令行。

CMake 直接使用操作系统 API 执行子进程:

  • 在 POSIX 平台上,命令行以 argv[] 样式数组传递给子进程。

  • 在 Windows 平台上,命令行被编码为字符串,这样使用 CommandLineToArgvW 的子进程将解码原始参数。

没有使用中间 shell,因此 > 等 shell 运算符被视为普通参数。 (使用 INPUT_*OUTPUT_*ERROR_* 选项重定向标准输入、标准输出和标准错误。)

对于多个命令的**顺序执行**,使用多个 execute_process 调用,每个调用带有一个 COMMAND 参数。

工作目录

命名目录将被设置为子进程的当前工作目录。

超时

在指定的秒数(允许小数)后,所有未完成的子进程将终止,并且 RESULT_VARIABLE 将设置为提及“超时”的字符串。

RESULT_VARIABLE

该变量将被设置为包含最后一个子进程的结果。这将是来自最后一个孩子的整数返回代码或描述错误情况的字符串。

RESULTS_VARIABLE <变量>

在 3.10 版本加入.

该变量将被设置为包含所有进程的结果,作为分号分隔的列表 <CMake Language Lists>,按照给定的 COMMAND 参数的顺序。每个条目将是来自相应子项的整数返回代码或描述错误情况的字符串。

INPUT_FILE <文件>

<file> 附加到 first COMMAND 进程的标准输入管道。

OUTPUT_FILE <文件>

<file> 附加到*last* COMMAND 进程的标准输出管道。

错误文件<文件>

<file> 附加到*所有* COMMAND 进程的标准错误管道。

在 3.3 版本加入: 如果为 OUTPUT_FILEERROR_FILE 命名了相同的 <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 <哪里>

在 3.15 版本加入.

正在运行的命令将被回显到 <where><where> 被设置为 STDERRSTDOUTNONE 之一。请参阅 CMAKE_EXECUTE_PROCESS_COMMAND_ECHO 变量,了解在不存在此选项时控制默认行为的方法。

编码<名称>

在 3.8 版本加入.

在 Windows 上,用于解码进程输出的编码。在其他平台上被忽略。有效的编码名称是:

没有

不执行解码。这假定流程输出的编码方式与 CMake 的内部编码 (UTF-8) 相同。这是默认设置。

自动

使用当前活动控制台的代码页,如果不可用,则使用 ANSI。

ANSI

使用 ANSI 代码页。

OEM

使用原始设备制造商 (OEM) 代码页。

UTF8UTF-8

使用 UTF-8 代码页。

在 3.11 版本加入: 接受 UTF-8 拼写以与 UTF-8 RFC 命名约定保持一致。

COMMAND_ERROR_IS_FATAL <ANY|LAST>

在 3.19 版本加入.

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

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

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