执行一个或多个子进程(cmake:使用execute_process调用shell命令或脚本)。

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执行子进程。所有参数都被逐字传递给子进程。没有使用中间shell,所以像>这样的shell操作符被视为普通参数。(使用INPUT_*、OUTPUT_*和ERROR_*选项重定向stdin、stdout和stderr。)
    • 如果需要连续执行多个命令,请使用多个execute_process()调用,并使用单个COMMAND参数。
  • 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>

    • 正在运行的命令将回显到< 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)代码页。
      • UTF8 or UTF-8:使用UTF-8代码页。
  • ECHO_OUTPUT_VARIABLE, ECHO_ERROR_VARIABLE

    • 3.18新版功能。
    • 标准输出或标准错误不会被专门重定向到已配置的变量。
    • 输出将被重复,它将被发送到配置的变量中,也在标准输出或标准错误上。
    • 这类似于tee Unix命令。
  • COMMAND_ERROR_IS_FATAL < ANY|LAST >:

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

      • ANY:如果命令列表中的任何一个命令失败,execute_process()命令将停止并报错。
      • LAST:如果命令列表中的最后一个命令失败,execute_process()命令将停止并报错。列表中前面的命令不会导致致命错误。

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

例子:

  • 执行shell命令
execute_process(COMMAND <一句shell命令> WORKING_DIRECTORY <这句shell命令执行的工作目录>)
  • 执行shell脚本
execute_process(COMMAND sh test.sh WORKING_DIRECTORY <test.sh所在目录>)

注:在调用一个execute_process时可以顺序执行多条COMMAND命令。

扩展:

  • 在cmake中也可以通过add_custom_comand 和 add_custom_target执行shell命令,但是他们是一般执行命令跟target的生成有关;
  • 而execute_process只是简单地在cmake执行编译之前调用shell命令,具体使用需要结合需求来选择!

execute_process()命令是exec_program()的一个更强大的新版本,但是为了兼容性,保留了旧的命令。当CMake在生成系统之前处理项目时,这两个命令都在运行。

cmake:execute_process相关推荐

  1. CMake:安装自己编写的动态库,报错

    CMake:安装自己编写的动态库,报错"file INSTALL cannot copy file" 具体情况如下: 原因: 权限问题. 安装共享库有时需要root密码,执行sud ...

  2. 【C++】mingw32-make+cmake:error: ‘nullptr‘ was not declared in this scope解决方法

    ###问题 使用cmake成功(Configuring done Generating done)后,在cmd终端中执行 mingw32-make报错: error: 'nullptr' was no ...

  3. Linux 7 cmake:curses library not found

    CentOS7 上面安装MySQL5.7出现以下问题: Curses library not found. Please install appropriate package 解决方法: # yum ...

  4. cmake:add_library生成静态库和动态库

    此文为:轻松入门cmake系列教程 有时我们只需要编译出动态库,静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake 实验 实验一:生成静态库 编写代码 项目结构如下: [CMak ...

  5. cmake:pkg_check_modules

    此文为:轻松入门cmake系列教程 理论 是什么? pkg_check_modules是 CMake 自己的 pkg-config 模块的一个用来简化的封装:你不用再检查 CMake 的版本,加载合适 ...

  6. CMake:aux_source_directory

    aux_source_directory 查找在某个路径下的所有源文件. aux_source_directory(< dir > < variable >) 具体用法: au ...

  7. cmake:命令行工具cmake

    概要 Generate a Project Buildsystemcmake [<options>] <path-to-source>cmake [<options> ...

  8. cmake:macro、endmacro

    macro 开始记录一个宏,以便以后作为命令调用 macro(<name> [<arg1> ...])<commands> endmacro() 定义了一个名为&l ...

  9. cmake:gcc-stack-protector

    gcc-stack-protector 以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞,由此引发的安全问题比比皆是.我们知道攻击者利用堆栈溢出漏洞时,通常会破坏当前的函数栈. 那有没有一种机制来 ...

  10. 【Linux杂学】CMake:编写 CMakeLists

    [CMake官网]:掌握CMake 1.变量 CMake 变量名称区分大小写,且只能包含字母数字字符和下划线 CMAKE_ 变量[存储均为字符串]是CMake 自定义变量,命名应避开 set 可设变量 ...

最新文章

  1. Mycat分库分表核心技术分析
  2. 简单字符串排序_JAVA
  3. Dalvik Virtual Execution with SmaliVM
  4. jQuery 判断元素是否在屏幕可见区域内
  5. Redis各特性的应用场景
  6. IDEA云行项目提示Error: java: OutOfMemoryError
  7. .NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统
  8. java 二维高斯_Java Random nextGaussian()用法及代码示例
  9. java四则出题判分_java 随机出题四则运算
  10. oral_quiz-#StackWithMin#
  11. 线代总结1 线性代数中的线性方程组
  12. HiJson 百度网盘下载
  13. 如何查阅python的官方文档
  14. 重置计算机的本地策略,手把手教你win10系统本地组策略重置恢复默认的详细方案...
  15. python随机森林回归_从零实现回归随机森林
  16. item的介绍与使用-2.0
  17. UI设计规范-全文篇
  18. MacBook更换开机登录界面壁纸
  19. 详解u盘装系统启动不了怎么办
  20. 高德地图的点聚合效果下的点的添加和删除

热门文章

  1. CMake之add_executable
  2. 关于求余和取模的区别以及负数取摸
  3. 10个提供Logo设计灵感的创意网站
  4. 关于JSP虚拟主机使用(上传自己的网页到外网)
  5. Tikhonov正则化工具包(MATLAB毕业设计用)
  6. 师傅对徒弟有大小眼怎么办?
  7. 如何使用Blender制作360度全景图和全景视频?
  8. js判断时间是否为今天日期(判断日期与当前日期相差多少天)
  9. 夏威夷大学计算机专业排名,夏威夷大学(美国夏威夷大学排名)
  10. java将元素添加进数组_如何在Java中将元素添加到数组的中点?