iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
Software Development

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

[Day 05] 什麼是 gnu、gcc、gdb、Make、CMake?

  • 分享至 

  • xImage
  •  

gnu(GNU’s Not Unix)

  • 定位:自由軟體計畫,1983 年由 Richard Stallman 發起。
  • 成果:提供了開發者常用的工具,例如:
    • 編譯器 → gcc
    • 除錯器 → gdb
    • 建置工具 → make
    • Shell → bash
  • 和 Linux 的關係
    Linux 核心 + GNU 工具 = 一般人所說的「Linux 系統」(GNU/Linux)。

gcc (GNU Compiler Collection)

  • 定位:編譯器
  • 功能:把你的 .c 原始碼轉換成機器能執行的程式。
  • 流程
    1. 預處理(Preprocessing)→ 展開 #include#define
    2. 編譯(Compilation)→ 把 C 語法翻譯成組合語言 .s
    3. 組譯(Assembling)→ 把 .s 轉成目標檔 .o
    4. 連結(Linking)→ 把多個 .o 與函式庫連起來 → a.out
  • 例子
    gcc main.c -o main

gdb (GNU Debugger)

  • 定位:除錯器
  • 功能:讓你在程式「執行中」觀察內部狀態,逐步追蹤 bug。
  • 能做的事
    • 下斷點 (breakpoint)
    • 單步執行 (step, next)
    • 看變數值 (print var)
    • 查看程式崩潰時的堆疊 (backtrace)
  • 例子
    gcc -g main.c -o main # -g 開啟除錯資訊 gdb ./main

Make

  • 定位:建置自動化工具
  • 功能:不用每次都手動打 gcc ...,而是寫一個 Makefile,自動幫你管理編譯規則。
  • 好處
    • 自動檢查哪些檔案更新 → 只重新編譯必要的檔案
    • 減少重複工作
  • 範例 Makefile
    main: main.o dog_meme.o gcc main.o dog_meme.o -o main main.o: main.c dog_meme.h gcc -c main.c dog_meme.o: dog_meme.c dog_meme.h gcc -c dog_meme.c clean: rm *.o main

CMake

  • 定位:跨平台建置系統的「產生器」
  • 功能:自動產生 MakefileNinja build file,讓專案更容易移植。
  • 特點
    • 跨平台(Linux, Windows, macOS)
    • 適合大型專案
    • 可以管理函式庫、第三方套件
  • 範例 CMakeLists.txt
    cmake_minimum_required(VERSION 3.10) project(dog_meme) add_executable(dog_meme main.c dog_meme.c)
    執行流程:
    mkdir build && cd build cmake .. make ./dog_meme

上一篇
[Day 04] 用過gcc了吧? 那我們現在來了解gcc!
下一篇
[Day 06] 非得用MAKE不可嗎? 讓我們再來了解一下makefile
系列文
30 天精通 C 語言建置與除錯:從 Makefile 到 CMake 跨平台實戰6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言