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_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 中添加。
标准输出或标准错误不会专门重定向至指定的变量。
输出将复制到指定的变量中,并仿照
tee
Unix 命令一样复制到标准输出或标准错误中。
注意
如果为同一管道给出多个 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 上,用于解码进程输出的编码。在其他平台上忽略。有效的编码名称为
COMMAND_ERROR_IS_FATAL <ANY|LAST>
在 3.19 版本中添加。
COMMAND_ERROR_IS_FATAL
后的选项决定了在遇到错误时的行为ANY
如果命令列表中的任何命令失败,execute_process()
命令将因错误而停止。LAST
如果命令列表中的最后一个命令失败,execute_process()
命令将因错误而停止。列表中前面的命令不会导致致命错误。