iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0
Software Development

30 天精通 C 語言建置與除錯:從 Makefile 到 CMake 跨平台實戰系列 第 25

[Day 25] 大概會使用Cmake了? 那我們來看看網路上的學習資源!

  • 分享至 

  • xImage
  •  

今天我們要透過幾個經典的 CMake 模板與範例,其實網路上已經有不少現成的 CMake 範例與專案骨架可供參考,依照不同的使用情境去挑選,能省下不少摸索的時間。以下我特別挑出 ttroy50/cmake-examples 以及 cpp-starter-project-cmake 這兩個專案來說明:
另外除了這兩個專案之外還有幾個專案,因為可以用的資源不少,所以簡單整理成以下表格給大家做初步的參考:

專案 性質 add_library add_executable find_package install/export 測試 (CTests/GTest) 依賴管理/範例 備註
ttroy50/cmake-examples 範例集/教學 ✔︎ ✔︎ 多數範例有 多數範例有 有些範例含測試 部分用 Fetch/外部包 範例由淺入深,著重「現代 CMake」用法。(GitHub)
pr0g/cmake-examples 範例集(特別強調安裝) ✔︎ ✔︎ 重點(components 等) 比重較小 強調最小可行、理解 install() 每一段作用。(GitHub)
cpp-starter-project-cmake 起始模板/骨架 ✔︎(靜/動/頭檔皆可) ✔︎ 有(安裝/匯出/打包) (測試、分析、文件) 常見工具鏈/模組 一站式覆蓋 Build→Test→Analysis→Doc→Deploy。(GitHub)
sunsided/cmake 範例專案(最佳實踐) ✔︎ ✔︎ (可 find_package() (可安裝並版本化) 支援以 add_subdirectory()find_package() 整合,多版本併存安裝。(GitHub)
gokhanettin/cmake-example 多庫相依範例 ✔︎(多個 lib) 可能有(範例重點在庫) 較少 較少 展示 target 介面與相依管理(sum/mul/factorial)。(GitHub
onqtam/awesome-cmake 資源彙整清單 N/A N/A N/A N/A N/A 連結大量模組/腳本/文章 不是可編譯專案,而是「導航清單」,含 modern vs. non-modern 指引。(GitHub)

cmake-examples:各種從簡單到進階的 CMake 範例

https://github.com/ttroy50/cmake-examples
這個專案算是一份CMake 的教學範例,把常見的 Cmake 使用情境做成小專案,讓人一步一步學習,而不是提供單一完整的大專案,主要是由許多簡單可以執行的小範例集成,基礎範例的方法大概會分成幾個
- 01-basic
- 最簡單的 CMakeLists.txt
- 如何建立一個執行檔 (add_executable)
- 如何指定標頭檔與來源檔
- 02-sub-projects
- 怎麼處理多個子專案 (subdirectories)
- 例如一個 app/ 目錄和一個 lib/ 目錄,app 需要 link lib
- 03-library
- 如何建立靜態庫、動態庫 (add_library)
- 如何在另一個程式中 target_link_libraries 去用它
- 04-packaging
- 示如何安裝 (install)
- 如何產生可被 find_package 使用的 config
- 05-exporting
- 教你如何導出 target,讓別人可以 find_package 找到你的 library
- 06-tests
- 如何整合 CTestGoogleTest 做單元測試
- 07-ExternalContent / FetchContent
- 示範怎麼抓取外部專案,像是 GitHub 上的 repo,當作依賴一起編譯
- 08-advanced
- 一些比較複雜的情境,例如使用 generator expressions、interface libraries、或自訂指令

cpp-starter-project-cmake

https://github.com/josephgarnier/cpp-starter-project-cmake
而 cpp-starter-project-cmake專案是一個 C++ + CMake 起手範本,設計給你快速建立新專案時使用,避免從零開始搭建

他的專案結構可以分為

  • src/:主要程式碼
  • include/:標頭檔(公開 API)
  • lib/:外部/第三方函式庫
  • tests/:單元測試
  • cmake/:CMake 模組(編譯器設定、工具鏈等)
  • config/:專案設定檔
  • assets/, resources/:靜態資源或附檔
  • doc/:文件
  • bin/, build/:輸出和編譯產物
  • CMakeLists.txt、CMakePresets.json 等現成設定
    算是提供功能很齊全的專案架構,如果要快速架立一個專案的時候可以使用他,完整功能包含
  • 支援 執行檔 / 靜態庫 / 動態庫 / header-only library
  • 整合 單元測試 (CTest, GoogleTest)
  • 提供 代碼分析、文件生成、打包 的建置流程
  • 支援 Windows / Linux / macOS
  • run-cmake.sh / .bat 可快速生成編譯指令

上一篇
[Day 24] 學會下Cmake make 命令編譯了? 那我們來學VScode 內建自動化編譯/除錯方法
系列文
30 天精通 C 語言建置與除錯:從 Makefile 到 CMake 跨平台實戰25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言