- 軟體名稱:CMake
- 軟體版本:4.0.1
- 授權類型:免費軟體
- 支援語系:英文
- 支援系統:Windows,Mac,Linux
- 官方網站:CMake
CMake 是一個跨平台的編譯系統,它允許開發者定義專案的編譯過程。以下是基本的 CMake 教學,幫助你開始使用它。
1. 安裝 CMake
你可以從 CMake 官方網站 下載並安裝對應的版本。大多數 Linux 發行版可以使用套件管理器來安裝,例如 Ubuntu 可以用:
sudo apt-get install cmake
2. CMake 基本流程
CMake 的目的是生成平台相關的編譯文件,例如 Makefile、Visual Studio 工程文件等。它使用一個叫做 CMakeLists.txt 的文件來描述專案結構、依賴和編譯選項。
3. 建立一個簡單專案
檔案結構
首先,建立一個專案目錄,例如:
MyProject/
├── CMakeLists.txt
└── main.cpp
main.cpp
這是一個簡單的 C++ 程式:
#include <iostream>
int main() {
std::cout << "Hello, CMake!" << std::endl;
return 0;
}
CMakeLists.txt
這是最基本的 CMake 配置文件:
cmake_minimum_required(VERSION 3.10)
# 專案名稱
project(MyProject)
# 指定 C++ 標準
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 添加可執行文件
add_executable(MyProject main.cpp)
這段 CMake 文件做了幾件事:
cmake_minimum_required定義了使用 CMake 的最低版本。project指定了專案名稱。set命令設置了 C++11 作為標準編譯版本。add_executable命令定義了編譯生成的可執行文件,並告訴 CMake 要編譯main.cpp。
4. 使用 CMake 編譯專案
在你的專案目錄下,創建一個新的目錄來存放編譯結果(通常稱為 build 文件夾):
mkdir build
cd build
cmake ..
make
cmake ..會讀取上層目錄的CMakeLists.txt,並生成對應的編譯文件(例如 Makefile)。make會根據生成的編譯文件進行編譯,並生成可執行文件。
如果成功,會在 build/ 目錄下生成一個名為 MyProject 的可執行文件。你可以執行它:
./MyProject
5. 添加更多檔案
如果你有多個源文件,可以在 CMakeLists.txt 中添加它們。例如,假設你有一個 helper.cpp 文件:
MyProject/
├── CMakeLists.txt
├── main.cpp
└── helper.cpp
你可以修改 CMakeLists.txt:
add_executable(MyProject main.cpp helper.cpp)
6. 使用外部庫
假設你想使用外部的庫(例如 Boost)。首先,確保你的系統上安裝了 Boost,然後在 CMakeLists.txt 中使用 find_package 查找它:
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(MyProject main.cpp)
target_link_libraries(MyProject ${Boost_LIBRARIES})
7. CMake 變數和選項
CMake 中有許多變數和選項可以控制編譯過程。常見的幾個例子:
CMAKE_BUILD_TYPE: 設置編譯類型,例如Debug或Release。CMAKE_CXX_COMPILER: 指定 C++ 編譯器。CMAKE_INSTALL_PREFIX: 設置安裝目錄。
你可以這樣指定編譯類型:
cmake -DCMAKE_BUILD_TYPE=Release ..
8. 安裝你的專案
如果你希望用 make install 安裝編譯好的專案,則需要在 CMakeLists.txt 中添加安裝路徑:
install(TARGETS MyProject DESTINATION bin)
然後在編譯之後運行:
make install
這將把你的可執行文件安裝到系統的 bin 目錄。
結論
CMake 是一個靈活且強大的編譯工具,適合用來處理多平台和多配置的專案。這個教學涵蓋了 CMake 的基本使用,但 CMake 還有許多進階功能,如編譯自動化、跨平台支持和測試整合,這些可以隨著你項目的需求深入學習。
