Makefile語法簡介

1.gcc參數詳解

參數 作用 實例
-o 指定目標名稱 gcc main.c text.o -o main
-c 只激活預處理,編譯和彙編,只是會產生.o文件 gcc -c hello.c
-x 指定語言,與後綴無關 gcc -x c hello.cpg
-S 只激活預處理和編譯,即把文件編譯成爲彙編語言 gcc -S hello.c
-E 只激活預處理,這個不生成文件 gcc -E hello.c > text.txt
-O0,-O1,-O2,-O3 優化選項 gcc -O2
-g 生成調試信息和gdb一起使用 gcc -g
-I 指定額外的頭文件搜索路徑和DIRECTORY gcc -I sub

2. 程序生成過程

- 預編譯
    gcc -E hello.c -o hello.i
        預編譯階段,.c .h ---> .i
        + 頭文件stdio.h 庫文件 引用進來
        + 展開宏定義
- 彙編
    gcc -S hello.i -o hello.S
        + 彙編代碼
- 編譯 .S --> .o obj文件
    gcc -c hello.S -o hello.o
- 鏈接 win .exe linux .elf
    gcc hello.o -o hello

3.語法

  1. # 註釋

  2. 語法格式
    目標文件:依賴文件,第一個文件應該是最終目標文件

  3. 僞目標 .PHONY:
    我們希望每次編譯先把之前先編譯的文件先刪除

hello:hello.o
     gcc hello.o -o hello
 hello.o:hello.S
     gcc -c hello.S -o hello.o
 hello.S:hello.i
     gcc -S hello.i -o hello.S
 hello.i:hello.c
     gcc -E hello.c -o hello.i
 .PHONY:
 #刪除所有文件
 clearall:
     rm -rf hello.i hello.S hello.o hello
 #刪除過程文件
 clear:
     rm -rf hello.i hello.S hello.o
  • 微觀過程.c .i .S .o
  • 宏觀過程:gcc -c xxx. -o xxx.o
  1. 變量
=(替換) +=(追加) :=(常量)
變量帶入 $(便令)
  1. 隱含規則
%.c任意的.c文件 
%.o任意的.o文件
*.c所有的.c文件
*.o所有的.o文件
%.o:%.c
 $(cc) -c %.c -o %.o
#任意的 .c匹配任意的 .o文件
  1. 通配符號
 $^:所有的依賴文件
 $@:所有的目標文件
 $<:所有依賴文件的第一個文件
 $>:所有依賴文件的最後一個文件

應用實例參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章