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

CMake指令:常见内置命令行工具( CMake -E )

目录

1.简介

2.核心作用

3.常用命令介绍

3.1.文件操作命令

3.2.系统命令执行

3.3.校验与哈希

3.4.流程控制与等待

3.5.路径与文件处理

3.6.归档与压缩

3.7.网络与下载

3.8.实用工具

4.使用示例

5.与 shell 命令的对比

6.在 CMake 脚本中使用

7.总结

相关链接


1.简介

        在 CMake 中,cmake -E 是一个强大的命令行工具模式,用于执行各种文件操作、系统命令和实用功能。它提供了一组跨平台的命令,可替代传统的 shell 命令(如 cpmkdirrm 等),确保在不同操作系统(Windows、Linux、macOS)上行为一致。

        CMake命令行工具的形式主题如下:

cmake -E  <命令> [<命令行参数>...]

2.核心作用

1.跨平台文件操作

 执行文件复制、移动、删除等操作,无需担心不同系统的命令语法差异(如 Windows 的 copy vs Linux 的 cp)。

2.系统命令封装

提供安全执行外部程序、环境变量操作等功能,避免直接调用平台特定命令。

3.脚本辅助工具

在 CMake 脚本(如 CMakeLists.txt 或 .cmake 文件)中执行复杂操作,或作为独立命令行工具使用。

3.常用命令介绍

3.1.文件操作命令

命令作用示例
cmake -E copy复制文件或目录(递归)。cmake -E copy src.txt dest.txt
cmake -E copy_directory src/ dest/
cmake -E remove删除文件或目录(递归)。cmake -E remove file.txt
cmake -E remove_directory build/
cmake -E make_directory创建目录(递归创建父目录)。cmake -E make_directory build/subdir
cmake -E rename重命名或移动文件 / 目录。cmake -E rename old.txt new.txt

3.2.系统命令执行

安全设置和读取环境变量,避免直接操作 shell 环境。

命令作用示例
cmake -E env设置环境变量并执行命令(跨平台)。cmake -E env "PATH=/new/path:$PATH" command.exe
cmake -E execute_process执行外部程序并捕获输出。cmake -E execute_process --cmd=ls --args=-l # 执行 ls -l
cmake -E env --unset取消环境变量并执行命令。cmake -E env --unset=PATH program.exe # 清空 PATH 执行程序
cmake -E chdir切换目录并执行命令(避免硬编码 cd 命令)。cmake -E chdir build cmake .. # 在 build 目录执行 cmake

3.3.校验与哈希

用于文件完整性验证、依赖校验等场景。

命令作用示例
cmake -E md5sum计算文件的 MD5 哈希值。cmake -E md5sum file.txt > file.md5
cmake -E sha256sum计算文件的 SHA-256 哈希值(更安全)。cmake -E sha256sum download.zip
cmake -E compare_files比较两个文件内容是否相同(二进制比较)。`cmake -E compare_files a.txt b.txtecho "文件不同"`

3.4.流程控制与等待

在脚本中实现暂停、条件判断等逻辑。

命令作用示例
cmake -E sleep暂停执行指定时间(秒),用于等待资源或定时操作。cmake -E sleep 10 # 暂停 10 秒
cmake -E time测量命令执行时间(类似 shell 的 time 命令)。cmake -E time cmake --build . # 测量编译时间

3.5.路径与文件处理

处理路径规范化、文件类型转换等。

命令作用示例
cmake -E canonicalize_path将路径转换为规范形式(解析 ../、符号链接,添加斜杠等)。cmake -E canonicalize_path ../src # 输出绝对路径
cmake -E echo输出文本(支持颜色和格式化,替代 shell 的 echo)。cmake -E echo "配置完成!"
cmake -E echo_append输出文本但不换行(类似 echo -n)。cmake -E echo_append "正在下载..."
cmake -E touch创建空文件或更新文件时间戳(类似 shell 的 touch)。cmake -E touch output.log

3.6.归档与压缩

创建或解压常见格式的归档文件,替代 tarzip 等命令。

命令作用示例
cmake -E tar创建或解压归档文件(支持 tartar.gzzip 等格式)。cmake -E tar xvf package.zip # 解压
cmake -E tar cf archive.tar src/ # 创建

3.7.网络与下载

安全执行网络请求,替代 curl 或 wget(需系统支持)。

命令作用示例
cmake -E download下载文件(支持 HTTP/HTTPS,带进度显示)。cmake -E download https://example.com/file.zip ./file.zip
cmake -E make_directory递归创建目录(与文件操作命令重复,但常用于下载前准备目录)。cmake -E make_directory downloads && cd downloads

3.8.实用工具

其他杂项功能。

命令作用示例
cmake -E capabilities显示当前 CMake 支持的所有 -E 命令。cmake -E capabilities
cmake -E create_symlink创建符号链接(需系统支持,如 Windows 管理员权限或 Linux/macOS)。cmake -E create_symlink src/ link_to_src

4.使用示例

1.跨平台创建目录并复制文件

# 创建多级目录
cmake -E make_directory build/bin/data# 复制文件(Windows/Linux 通用)
cmake -E copy src/main.exe build/bin/
cmake -E copy_directory assets/ build/bin/data/

2.安全执行外部命令

# 在特定目录执行命令(避免硬编码 cd 命令)
cmake -E chdir build cmake --build . --config Release# 设置环境变量并执行(Windows/Linux 通用)
cmake -E env "CXX=g++" "CFLAGS=-O3" cmake ..

3.文件校验

# 下载文件并验证哈希
curl -O https://example.com/file.zip
cmake -E sha256sum file.zip | grep "expected_hash"

4.自动化构建流程

# 编译前清理并计时
cmake -E remove_directory build
cmake -E make_directory build
cmake -E time cmake -S . -B build
cmake -E time cmake --build build

5.环境隔离执行

# 在临时环境中执行命令(不影响当前环境)
cmake -E env "PATH=/custom/path:$PATH" "DEBUG=1" myapp.exe

5.与 shell 命令的对比

功能shell 命令(Linux/macOS)shell 命令(Windows)cmake -E 替代方案优势
创建目录mkdir -p buildmkdir buildcmake -E make_directory build递归创建,无需处理 -p 参数差异
复制文件cp src.txt dest.txtcopy src.txt dest.txtcmake -E copy src.txt dest.txt统一语法,自动处理路径分隔符差异
删除目录rm -rf buildrmdir /s /q buildcmake -E remove_directory build无需记忆 /s /q 等参数
执行命令cd build && makecd build && nmakecmake -E chdir build cmake --build .跨平台目录切换与命令执行

6.在 CMake 脚本中使用

在 CMakeLists.txt 或 .cmake 文件中,可通过 execute_process 调用 cmake -E 命令:

# 创建目录
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/data)# 复制文件
execute_process(COMMAND ${CMAKE_COMMAND} -E copy${CMAKE_SOURCE_DIR}/config.ini${CMAKE_BINARY_DIR}/config.ini
)# 计算哈希
execute_process(COMMAND ${CMAKE_COMMAND} -E md5sum ${CMAKE_SOURCE_DIR}/README.mdOUTPUT_VARIABLE readme_hash
)
message(STATUS "README.md 的 MD5: ${readme_hash}")

7.总结

cmake -E 提供了一套跨平台的命令行工具,用于替代传统 shell 命令,特别适合需要在不同操作系统上保持一致行为的场景。它在 CMake 脚本、自动化构建流程(如 CI/CD)中尤为有用,能显著简化跨平台文件操作和系统命令执行的复杂度。

相关链接

  • CMake 官网 CMake - Upgrade Your Software Build System
  • CMake 官方文档:CMake Tutorial — CMake 4.1.0-rc2 Documentation
  • CMake 源码:https://github.com/Kitware/CMake
  • CMake 源码:CMake · GitLab
  • 中文版基础介绍: CMake 入门实战 | HaHack
  • wiki: Home · Wiki · CMake / Community · GitLab
  • Modern CMake 简体中文版:  Introduction · Modern CMake
http://www.dtcms.com/a/286931.html

相关文章:

  • 乙烯丙烯酸酯橡胶市场报告:性能优势、行业现状与发展前景​
  • selenium后续!!
  • 【数据集】1970-2023年全球温室气体排放 GHG 数据集 EDGAR
  • 语音直播和视频直播的测试要点
  • 【ROS1】06-ROS通信机制——话题通信
  • OOA、OOD 与 OOP:面向对象范式的核心支柱详解
  • 接口测试的原则、用例与流程详解
  • ModelSim 配合 Makefile 搭建 Verilog 仿真工程
  • Docker-下载和安装
  • ADVB协议内容分析
  • LeetCode Hot100【6. Z 字形变换】
  • GI6E 加密GRID電碼通信SHELLCODE載入
  • CCF编程能力等级认证GESP—C++3级—20250628
  • 操作系统-处理机调度和死锁进程同步
  • 基于Qwen2.5-3B-Instruct的LoRA微调与推理实战指南
  • 多线程-3-线程同步
  • HTTPie: 开发者友好的http客户端工具
  • 数据排序
  • 特种作业操作证(制冷空调)的考试科目有哪些?
  • Xilinx Zynq:一款适用于软件定义无线电的现代片上系统
  • 使用 C# 实现移动加权平均(Weighted Moving Average)算法
  • java基础-5 : 面向对象
  • python网络爬虫(第三章/共三章:驱动浏览器窗口界面,网页元素定位,模拟用户交互(输入操作、点击操作、文件上传),浏览器窗口切换,循环爬取存储)
  • RPG60.生成可拾取物品
  • 拓扑排序/
  • 安卓Android项目 报错:系统找不到指定文件
  • Python编程:从入门到实践
  • rpa机器人流程自动化软件公司是做什么的?如何选择RPA厂商?简要介绍RPA技术、应用场景和未来趋势
  • Shell变量操作
  • Linux内核设计与实现 - 第4章 进程的调度