ETH官方钱包

前往
大廳
主題

【CMake 學習筆記】學校不會教,但必須會

%%鼠 拒收病婿 | 2024-08-18 18:51:08 | 巴幣 1246 | 人氣 350

前言

最近工作發現很坑的狀況,opensource的檔案build出來發現include與lib路徑被cmake寫死成絕對路徑,所以就萌生了想看懂CMAKE的想法。



甚麼是CMAKE

CMake 是一種跨平臺的自動化建構工具,主要用來管理軟體建置。透過撰寫 CMakeLists.txt 檔案來控制建構過程,使得工程搭建的步驟變得簡單容易。CMake 能夠生成 makefile、Visual Studio 或 Xcode 的專案文件。

CMake 的名稱來自 "Cross platform Make" 的縮寫。雖然名字中含有 "make",但 CMake 和 Unix 上常見的 make 系統是分開的,而且更為高階。它可以與原生建置環境結合使用,例如 make、ninja、蘋果公司的 Xcode 與微軟的 Microsoft Visual Studio。

CMake 的主要功能包括:
  • 支援多層目錄、多個應用程式與多個函式庫的建構。
  • 生成標準的建構檔(如 Unix 的 Makefile 或 Windows 的 Visual Studio 專案)。
  • 支援靜態與動態程式庫的建構。
  • 內建對多種編譯器的支援,包括 C、C++、Fortran 等。
很推這個影片

基本指令

建立只有2個檔案的folder


# 指定Cmake版本需求
cmake_minimum_required(VERSION 3.10)
# Project名稱
project(Example)
# 指定要build成exe檔的cpp file
add_executable(Example main.cpp)

先建立子資料夾build,CMakeLists.txt在上一層,所以使用cmake ../

#建立folder
mkdir build
cd build
# 在目前資料夾configure 上一層資料夾的內容
cmake ../
# build目前資料夾
cmake --build .

Configure的目標設成Visual studio,會產生這一堆檔案


設定變數

在header.in檔案定義變數名稱STARBURTST,"@C8763@"之後會被cmake填上值。
//.h.in file
#define STARBURTST @C8763@

在makelists設定變數C8763 = 1016

set(C8763 1016)

make之後的header file內容為:
#define STARBURTST 1016

有些指令cmake會自動定義變數,例如設定版本時會自動定義<Project_Name>_VERSION_MAJOR和_MINOR
#Will set TutorialAA_VERSION_MAJOR = 1 and TutorialAA_VERSION_MINOR = 0
project(TutorialAA VERSION 1.0)

送禮物贊助創作者 !
0
留言

創作回應

慕羊犬—雪夜
感謝大佬教學
2024-08-18 19:04:37
%%鼠 拒收病婿
愛你們
2024-08-18 20:20:45
追蹤 創作集

作者相關創作

相關創作

更多創作