---
# System prepended metadata

title: '[Day 1] 前言 - 關於本系列'

---

---
title: \[Day 1\] 前言 - 關於本系列
tags: ithome, ithome2023, cmake
---

# [Day 1] 前言 - 關於本系列

# CMake 是什麼? 可以吃嗎?
CMake 是一個支援 cross compile 的 build tool, 讓我們 (developer) 能夠產生適用不同 compiler, 作業系統和環境的文件

如果沒有 CMake, 想在不同平台上 build code 時, 我們需要針對每個不同的平台寫不同的 script, 相當麻煩

CMake 可以幫我們自動產生這些 script, 比如 Makefile, Ninja, Visual Studio 等等

總之, CMake 省下了因為需要 build code 給不同平台使用所需要花費的人力與時間成本, 讓 developer 能夠專注在業務功能的開發, 也能讓專案架構得到改善


# 誰適合看這系列
本系列為初階內容, 適合對 CMake 不熟悉, 但是想了解如何使用的人
如果有 C++ 開發經驗更好, 沒有也沒關係, 此系列會用最簡單的範例程式做介紹, 盡量將重點放在 CMake
甚至對作業系統, 計算機組織不熟的人也都可以閱讀

由於上述內容只會簡單帶過, 如果對這些有興趣的話, 個人推薦以下幾本書

C++
* Effective C++
* More Effective C++

作業系統
* Operating System Concepts (恐龍本)

計算機組織
* Computer Organization and Design (楓葉本)


# 此系列有什麼
你可以從本系列了解 CMake 是什麼, 基本語法, 建議的用法, 如何 cross compile

除了 CMake 以外, 我會在講到相關概念時簡單解釋, 比如
* 一般說的 build code 到底是什麼?
* Generator 是什麼?
* Toolchain 又是什麼?
* 為什麼需要 cross compile?

另外, 專案的架構也很重要
好的專案架構不只可以讓開發時 CMake 寫起來更愉快
對後續寫測試, 安裝, 打包, 甚至 cross compile 也有很大的影響

當然, 本系列不會讓你做出一個厲害的 Side Project, 也涵蓋不了所有開發可能會遇到的情況

初期會用簡單的程式做介紹, 讓大家專注於 CMake 的語法和其特性, 並介紹相關的概念

並會在最後幾天帶大家看看 Open Source 專案 (PyTorch) 是如何寫 CMake 的

希望大家看完後, 不只能夠自己開發跨平台程式, 也能看懂 CMake 的專案, 自己 debug 自己 compile!


# 此系列沒有什麼
此系列 **不會**
* 寫出很厲害的 Side Project
* 介紹或使用 `cmake-gui`
* Build Apple 系列程式 (ex. iOS, MacOS, watchOS, tvOS)
* 使用 IDE 如 CLion, Visual Studio, Xcode, VSCode 等等


# 30 天主題
接下來一個月會和大家介紹以下內容
* [\[Day 1\] 前言 - 關於本系列](https://ithelp.ithome.com.tw/articles/10314370)
* [Day 2] 環境設置與 Hello World
* [Day 3] CMake 介紹
* [Day 4] Variables 類型
* [Day 5] Functions 和 Modules
* [Day 6] 什麼是 Generators?
* [Day 7] 如何 Debug?
* [Day 8] Target 類型
* [Day 9] 第一個 CMake 專案!
* [Day 10] Build basics
* [Day 11] Library 類型
* [Day 12] 寫出我的第一個 Library
* [Day 13] 更多 Library
* [Day 14] 加入 System library
* [Day 15] 加入 Open source library
* [Day 16] 管理 Library 版本
* [Day 17] 什麼是 Symbols?
* [Day 18] 注意! Link dependencies
* [Day 19] 我的第一個測試!
* [Day 20] 安裝 Project
* [Day 21] Relocatable project
* [Day 22] 打包我的 Project
* [Day 23] 讓別人 Link 我的 Project
* [Day 24] 你需要再快一點! Build performance
* [Day 25] Debug 版本
* [Day 26] Ninja Multi-Config
* [Day 27] 終於要來 Cross compile!
* [Day 28] Build Windows 版本
* [Day 29] 你的專屬設定 - Presets
* [Day 30] Real-world example - PyTorch

# 預告
接下來就來設置環境, 然後用一分鐘來 build 出我們的第一個專案吧!