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.pswp.cn/diannao/91737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91737.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

YOLO融合CAF-YOLO中的ACFM模塊

YOLOv11v10v8使用教程&#xff1a; YOLOv11入門到入土使用教程 YOLOv11改進匯總貼&#xff1a;YOLOv11及自研模型更新匯總 《CAF-YOLO: A Robust Framework for Multi-Scale Lesion Detection in Biomedical Imagery》 一、 模塊介紹 論文鏈接&#xff1a;https://arxiv.org…

Webpack 項目構建優化詳解

1. 相關面試題 1.1. 做過哪些Webpack打包構建優化? 代碼分割:使用 Webpack 的 SplitChunksPlugin 進行代碼分割,將第三方庫、公共代碼與業務代碼分離,提高緩存利用率和加載速度。 Tree Shaking:通過配置 mode: production 或使用 TerserPlugin,移除未引用的代碼,減少…

【深度學習基礎】張量與Tensor的區別?從標量到深度學習的多維世界

目錄引言一、張量&#xff08;Tensor&#xff09;的定義與特性1. 數學中的張量2. 深度學習中的Tensor二、標量&#xff08;Scalar&#xff09;是什么&#xff1f;三、深度學習中的其他核心量1. 向量&#xff08;Vector&#xff09;2. 矩陣&#xff08;Matrix&#xff09;3. 高階…

設計模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一種行為設計模式&#xff0c;它通過定義一個算法的骨架&#xff0c;而將一些步驟延遲到子類中實現。Template Method 使得子類可以不改變&#xff08;復用&#xff09;一個算法結構 即可重定義&#xff08;override 重寫&#xff09;該算法的某些特定步驟。基本…

Linux驅動學習day24(UART子系統)

一、UART硬件理論1.1 作用及功能UART&#xff1a;通用異步收發傳輸器&#xff0c;簡稱串口。功能&#xff1a;移植u-boot、內核時&#xff0c;主要使用串口查看打印信息。外接各種模塊&#xff0c;比如藍牙GPS模塊。使用UART的時候&#xff0c;要注意1. 波特率 2. 格式&#xf…

NFS共享服務器

目錄 任務要求 思路總結 1.NFS共享服務 服務端 (ip 192.168.48.128) 客戶端 (ip 192.168.48.130) 2.配置autofs自動掛載 任務要求 1.NFS服務器,可以讓PC將網絡中的NFS服務器共享的目錄掛載到本地端的文件系統中,而在本地端的系統中看來&#xff0c;那個遠程主機的目…

FreeRTOS學習筆記之隊列

小編正在學習嵌入式軟件&#xff0c;目前建立了一個交流群&#xff0c;可以留下你的評論&#xff0c;我拉你進群一、簡介隊列是為了任務與任務、任務與中斷之間的通信而準備的&#xff0c;可以在任務與任務、任務與中斷之間消息傳遞&#xff0c;隊列中可以存儲有限的、大小固定…

垃圾收集器-ZGC

前言在Java開發中&#xff0c;垃圾收集器的選擇對系統性能有著致命的影響。Java 8后&#xff0c;雖然G1 GC成為默認&#xff0c;但是它在延遲性控制上仍有限。ZGC作為最新一代高性能低延遲垃圾收集器&#xff0c;解決了CMS和G1在延遲、垃圾堆容量和吞吐量方面的重大突破。本文將…

計算機“十萬個為什么”之跨域

計算機“十萬個為什么”之跨域 本文是計算機“十萬個為什么”系列的第五篇&#xff0c;主要是介紹跨域的相關知識。 作者&#xff1a;無限大 推薦閱讀時間&#xff1a;10 分鐘 一、引言&#xff1a;為什么會有跨域這個“攔路虎”&#xff1f; 想象你正在參觀一座戒備森嚴的城堡…

C語言:20250719筆記

字符數組在C語言中&#xff0c;支持字符串常量&#xff0c;不支持字符串變量。如果想要實現類似的字符串變量&#xff0c;C語言提供了兩種實現方式&#xff1a;字符數組&#xff1a;char name[] “哪吒”&#xff1b;字符指針&#xff1a;char *name "娜吒"&#x…

decltype是什么,什么作用?

基本概念decltype 是 C11 引入的關鍵字&#xff0c;用于推導表達式的類型&#xff0c;且會完整保留類型的細節&#xff08;包括 const、引用 &、指針 * 等&#xff09;。語法:decltype(表達式) 變量名核心特點1.推導依據是表達式本身&#xff0c;而非表達式的結果&#xff…

RPC 與 Feign 的區別筆記

一、基本概念 1.1 RPC&#xff08;Remote Procedure Call&#xff09; 定義&#xff1a;遠程過程調用&#xff0c;允許像調用本地方法一樣調用遠程服務的方法。 本質&#xff1a;跨進程通信&#xff0c;隱藏了底層網絡通信的復雜性。 常見實現&#xff1a; Java 原生 RMIDub…

高防IP能夠防御CC攻擊嗎?它具備哪些顯著優勢?

摘要&#xff1a; 面對日益復雜的網絡攻擊&#xff0c;高防IP作為重要的安全工具&#xff0c;不僅能防御常見的DDoS攻擊&#xff0c;還能有效應對CC攻擊。本文將解析高防IP防御CC攻擊的原理及其核心優勢&#xff0c;幫助讀者了解其在網絡安全中的關鍵作用。一、高防IP能否防御C…

TypeScript 類型注解(一)

一、TypeScript 類型注解1、什么是TpyeScript類型注解- 是否還記得TypeScript的兩個重要特性&#xff1f;- 類型系統、適用于任何規模- 可以說&#xff0c;TS的類型系統是TS最重要的功能&#xff1b;那么什么是類型注解呢&#xff1f;其實就是在聲明變量時&#xff0c;將變量的…

弗蘭肯斯坦式的人工智能與GTM策略的崩潰

2025 年上半年已經明確了一件事&#xff1a;B2B 市場營銷團隊被工具淹沒&#xff0c;但缺乏策略。人工智能無處不在。收入領導者在進行無休止的試點。營銷團隊拼湊各種點解決方案&#xff0c;希望能實現規模擴張。然而&#xff0c;銷售線索的增長停滯不前。信譽正在受損。曾經承…

NAND閃存(NAND Flash)是什么?

NAND閃存(NAND Flash)是什么? NAND閃存(NAND Flash)詳解 NAND閃存是一種非易失性存儲介質(斷電不丟失數據),廣泛應用于SSD、U盤、手機存儲等設備中。NAND Flash 的全稱是 “Negative-AND Flash”(與非型閃存),其名稱源自其底層存儲單元的電路結構——基于**“與非門…

Android性能優化之UI渲染優化

一、UI渲染核心瓶頸深度解析 1. 渲染管線關鍵階段階段CPU工作GPU工作潛在卡頓點Measure計算View尺寸-嵌套布局多次測量Layout計算View位置-頻繁重排(Relayout)Draw構建DisplayList指令集-復雜自定義View.onDraw()Sync & Upload資源上傳到GPU內存紋理上傳大圖/未壓縮資源Ras…

基于Spring AI Alibaba的智能知識助手系統:從零到一的RAG實戰開發

&#x1f4d6; 項目概述 在人工智能快速發展的今天&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技術已成為構建智能問答系統的核心技術。本文將詳細介紹一個基于Spring AI Alibaba DashScope深度集成的智能知識助手系統的完整開發過程&#xff0c;…

VirtualBox + CentOS:啟用 DHCP 獲取 IPv4 地址

標題&#xff1a; VirtualBox CentOS&#xff1a;啟用 DHCP 獲取 IPv4 地址 日期&#xff1a; 2025-07-18 一、問題現象 最小化安裝的 CentOS 7 虛擬機里敲&#xff1a; ip addr輸出只有 lo 的 127.0.0.1 以及 enp0s3 的 IPv6 鏈路本地地址&#xff0c;沒有 IPv4&#xff0…

Git

Git簡介Git 是一個分布式版本控制工具&#xff0c;通常用來對軟件開發過程中的源代碼文件進行管理。通過Git 倉庫來存儲和管理這些文件&#xff0c;Git 倉庫分為兩種:本地倉庫:開發人員自己電腦上的 Git倉庫。遠程倉庫:遠程服務器上的 Git 倉庫。commit: 提交, 將本地文件和版本…