目錄
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 命令(如?cp
、mkdir
、rm
?等),確保在不同操作系統(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.txt | echo "文件不同"` |
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.歸檔與壓縮
創建或解壓常見格式的歸檔文件,替代?tar
、zip
?等命令。
命令 | 作用 | 示例 |
---|---|---|
cmake -E tar | 創建或解壓歸檔文件(支持?tar 、tar.gz 、zip ?等格式)。 | 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 build | mkdir build | cmake -E make_directory build | 遞歸創建,無需處理?-p ?參數差異 |
復制文件 | cp src.txt dest.txt | copy src.txt dest.txt | cmake -E copy src.txt dest.txt | 統一語法,自動處理路徑分隔符差異 |
刪除目錄 | rm -rf build | rmdir /s /q build | cmake -E remove_directory build | 無需記憶?/s /q ?等參數 |
執行命令 | cd build && make | cd build && nmake | cmake -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