当前位置: 首页 > article >正文

cmake中execute_process详解

execute_process 是 CMake 中一个非常强大的命令,用于在构建过程中执行外部程序或脚本。它提供了丰富的选项来控制执行过程,并可以捕获输出、错误和返回码。以下是 execute_process 的详细解析:

基本语法

execute_process(
    COMMAND <command>...>
    [WORKING_DIRECTORY <directory>]
    [TIMEOUT <seconds>]
    [COMMAND_ECHO <SILENT|NORMAL|DETAILED>]
    [RESULT_VARIABLE <variable>]
    [ERROR_VARIABLE <variable>]
    [ERROR_STRIP_TRAILING_WHITESPACE]
    [ERROR_CODE <variable>]
    [ERROR_CODE_VARIABLE <variable>]
    [ERROR_FILE <file>]
    [ERROR_FILE_STRIP_TRAILING_WHITESPACE]
    [OUTPUT_VARIABLE <variable>]
    [OUTPUT_STRIP_TRAILING_WHITESPACE]
    [OUTPUT_FILE <file>]
    [OUTPUT_FILE_STRIP_TRAILING_WHITESPACE]
    [INPUT <string|list>]
    [INPUT_DATA <string|list>]
)

参数详解

  • COMMAND: 要执行的命令及其参数。可以是一个字符串或列表形式。例如:COMMAND make install 或 COMMAND {CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake_install.cmake
  • WORKING_DIRECTORY: 设置命令执行时的工作目录。例如:WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  • TIMEOUT: 设置命令执行的超时时间(以秒为单位)。如果命令在指定时间内未完成,则会被终止。例如:TIMEOUT 60
  • COMMAND_ECHO: 控制是否在执行命令时打印命令行。可选值为 SILENTNORMALDETAILED。默认为 NORMAL
    • SILENT: 不打印任何信息。
    • NORMAL: 打印命令名称和第一个参数。
    • DETAILED: 打印完整的命令行。
  • RESULT_VARIABLE: 存储命令执行结果的变量。如果命令成功执行,该变量将被设置为 TRUE;否则为 FALSE
  • ERROR_VARIABLE: 存储命令标准错误输出的变量。可以与 ERROR_STRIP_TRAILING_WHITESPACE 一起使用来去除末尾的空白字符。
  • ERROR_STRIP_TRAILING_WHITESPACE: 如果设置了此选项,将从 ERROR_VARIABLE 中去除末尾的空白字符。
  • ERROR_CODE: 存储命令返回码的变量。如果命令成功执行,该变量将被设置为 0;否则为非零值。
  • ERROR_CODE_VARIABLE: 存储命令返回码的变量名。
  • ERROR_FILE: 将命令的标准错误输出重定向到指定的文件。可以与 ERROR_FILE_STRIP_TRAILING_WHITESPACE 一起使用来去除末尾的空白字符。
  • ERROR_FILE_STRIP_TRAILING_WHITESPACE: 如果设置了此选项,将从 ERROR_FILE 中去除末尾的空白字符。
  • OUTPUT_VARIABLE: 存储命令标准输出的变量。可以与 OUTPUT_STRIP_TRAILING_WHITESPACE 一起使用来去除末尾的空白字符。
  • OUTPUT_STRIP_TRAILING_WHITESPACE: 如果设置了此选项,将从 OUTPUT_VARIABLE 中去除末尾的空白字符。
  • OUTPUT_FILE: 将命令的标准输出重定向到指定的文件。可以与 OUTPUT_FILE_STRIP_TRAILING_WHITESPACE 一起使用来去除末尾的空白字符。
  • OUTPUT_FILE_STRIP_TRAILING_WHITESPACE: 如果设置了此选项,将从 OUTPUT_FILE 中去除末尾的空白字符。
  • INPUT: 向命令的标准输入提供数据。可以是字符串或列表形式。
  • INPUT_DATA: 类似于 INPUT,但允许使用更复杂的数据类型,例如列表。

示例

  • 简单示例:

execute_process(
    COMMAND echo "Hello, World!"
    OUTPUT_VARIABLE output
)
message("Output: ${output}")
  • 带工作目录和超时:
execute_process(
    COMMAND ls /nonexistent/path
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    TIMEOUT 5
    RESULT_VARIABLE result
)
if (result)
    message("Command succeeded")
else()
    message("Command failed or timed out")
endif()
  • 捕获标准输出和错误输出:
execute_process(
    COMMAND ls /nonexistent/path
    OUTPUT_VARIABLE output
    ERROR_VARIABLE error
)
message("Output: ${output}")
message("Error: ${error}")
  • 重定向输出到文件:
execute_process(
    COMMAND ls /nonexistent/path
    OUTPUT_FILE ${CMAKE_BINARY_DIR}/output.txt
    ERROR_FILE ${CMAKE_BINARY_DIR}/error.txt
)

通过这些参数和示例,你可以看到 execute_process 命令在 CMake 中的强大功能,它可以帮助你在构建过程中灵活地执行外部命令并处理其输出。


http://www.kler.cn/a/384685.html

相关文章:

  • Oracle SQL Loader概念及用法
  • NetCore使用Aop和内存缓存对接口、方法进行数据缓存
  • Spring Boot中集成MyBatis操作数据库详细教程
  • CentOS 7 更换软件仓库
  • Jest项目实战(4):将工具库顺利迁移到GitHub的完整指南
  • Transformer和BERT的区别
  • 全卷积和全连接
  • C++20 STL CookBook2 更强大的编译时 + 安全比较 + spaceship比较符
  • IP SSL证书
  • 22.04Ubuntu---ROS2使用rclcpp编写节点
  • Catsxp云游戏白屏
  • 飞牛fnOs内网穿透-使用Lucky实现ipv6动态解析+HTTPS访问NAS服务
  • Go-性能优化、自动内存管理
  • Spring Boot详解:从入门到精通
  • File.separator与File.separatorChar的区别
  • 166页PDF | 埃森哲-XX集团企业架构数字化整体规划设计方案(限免下载)
  • Javaweb梳理10——Maven
  • 2020年美国总统大选数据分析与模型预测
  • 【人工智能】利用大语言模型(LLM)实现机器学习模型选择与实验的自动化
  • 提交linux kernel patch流程
  • 【C++】异常处理机制(对运行时错误的处理)
  • vue2 pdf 链接地址打开
  • “让工作更简单智能“ - 经纬恒润自主研发INTEWORK系列工具
  • 【信号处理】基于联合图像表示的深度学习卷积神经网络
  • HarmonyOS第一课——DevEco Studio的使用
  • 使用Spring Boot搭建简单的web服务