一、CMake 簡介
CMake 是一個跨平臺的構建工具,用于自動化生成不同平臺(如 Makefile、Visual Studio、Xcode 等)的構建文件。它的核心是編寫 CMakeLists.txt
文件,定義項目的構建規則。
二、安裝 CMake
-
Linux:
sudo apt-get install cmake
-
Windows:
下載安裝包 CMake官網。
-
macOS:
brew install cmake
三、基礎用法
1. 最小化 CMake 項目
創建一個 CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.10) # 指定 CMake 最低版本project(MyProject) # 項目名稱add_executable(my_app main.cpp) # 生成可執行文件
2. 構建項目
mkdir build && cd build # 創建構建目錄(推薦)cmake .. # 生成構建文件(如 Makefile)make # 編譯項目(Linux/macOS)
四、核心命令詳解
1. 定義項目
project(MyProject # 項目名VERSION 1.0.0 # 版本號(可選)LANGUAGES C CXX # 支持的語言(C/C++))
2. 添加可執行文件
add_executable(my_app # 可執行文件名main.cpp # 源文件列表utils.cpp)
3. 添加庫
# 靜態庫add_library(my_lib STATIC lib.cpp)# 動態庫(SHARED)add_library(my_lib SHARED lib.cpp)
4. 鏈接庫到可執行文件
target_link_libraries(my_app PRIVATE my_lib)
5. 包含頭文件目錄
target_include_directories(my_app # 目標(可執行文件或庫)PRIVATE # 作用域(PUBLIC/PRIVATE/INTERFACE)include # 頭文件目錄)
6. 設置編譯選項
# 全局編譯選項add_compile_options(-Wall -Wextra)# 目標專屬選項target_compile_options(my_app PRIVATE -O2)
7. 變量與條件判斷
set(MY_VAR "value") # 定義變量if (WIN32)# Windows 平臺特有配置endif()
五、多目錄項目結構
1. 子目錄管理
project/├── CMakeLists.txt # 根目錄├── src/│ ├── CMakeLists.txt│ └── main.cpp└── lib/├── CMakeLists.txt└── my_lib.cpp
根目錄的 CMakeLists.txt
:
cmake_minimum_required(VERSION 3.10)project(MyProject)add_subdirectory(lib) # 包含子目錄add_sadd_subdirectory(src)
子目錄的 CMakeLists.txt
(例如 src/CMakeLists.txt
):
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE my_lib)
六、常用變量
變量名 | 說明 |
---|---|
CMAKE_CXX_STANDARD | 設置 C++ 標準(如 11/14/17) |
CMAKE_BUILD_TYPE | 構建類型(Debug/Release) |
CMAKE_CXX_COMPILER | 指定編譯器路徑 |
PROJECT_SOURCE_DIR | 項目根目錄路徑 |
示例:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)
七、進階功能
1. 生成配置頭文件
configure_file(config.h.in # 輸入文件config.h # 輸出文件
)
2. 查找第三方庫
find_package(Boost REQUIRED COMPONENTS filesystem)
target_link_libraries(my_app PRIVATE Boost::filesystem)
3. 安裝目標
install(TARGETS my_app # 安裝可執行文件DESTINATION bin # 安裝路徑(默認 /usr/local/)
)
4. 自定義命令
add_custom_command(OUTPUT output_fileCOMMAND python3 script.pyDEPENDS input_file
)
八、常見問題
1. 如何生成 IDE 項目(如 Visual Studio)?
cmake -G "Visual Studio 17 2022" ..
2. 如何清理構建文件?
rm -rf build/ # Linux/macOS
3. 如何啟用調試信息?
set(CMAKE_BUILD_TYPE Debug)
九、完整示例
項目結構
demo/
├── CMakeLists.txt
├── include/
│ └── utils.h
├── src/
│ ├── main.cpp
│ └── utils.cpp
└── lib/└── math/├── CMakeLists.txt├── math.h└── math.cpp
根目錄 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(DemoProject VERSION 1.0)add_subdirectory(lib/math) # 添加數學庫
add_subdirectory(src)# 設置 C++ 標準
set(CMAKE_CXX_STANDARD 17)
lib/math/CMakeLists.txt
add_library(math STATIC math.cpp)
target_include_directories(math PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
src/CMakeLists.txt
add_executable(demo main.cpp utils.cpp)
target_include_directories(demo PRIVATE ../include)
target_link_libraries(demo PRIVATE math)
參考資料:
CMake文檔:CMake Documentation。
?