makefile作用就不說了。。。
目前學習只爲在win下面使用,就是這麼傲驕。
1. 最簡單的makefile
敲下 make 之後,會自動找makefile當中的第一個target(目標文件)
Target : Dependencies
目標文件 : 依賴文件
如:
main.exe : main.obj xxx.obj
command...
main.obj : main.c xxx.c
command...
command爲對應的compiler 和 linker 名字與所需的選項參數
也可以手動指定要make的目標, make clean (下述)
也可以指定makefile 以及 target ---> make [makefile][target]
2.僞目標
在makefile最開始加上.PHONY: clean
.PHONY: clean
main.exe : main.obj xxx.obj
command...
main.obj : main.c xxx.c
command...
clean:
//用來清除編譯過程中產生的多餘文件 rm / del
***此處可以不在makefile最開始加上.PHONY: clean, 但是當前make目錄下有名爲clean的文件時,此時make clean就不行了。
3.自動化變量
$@: 規則的目標文件名
$< : 規則的第一個依賴文件名
$^ : 規則的所有依賴文件列表
如:
main.exe:main.obj xxx.obj
$@ ---> main.exe
$< ---> main.obj
$^ ---> main.obj xxx.obj
***自定義變量
BIN=main.exe
OBJ=main.obj xxx.obj
SRC=main.c xxx.c
$(BIN):$(OBJ)
command...
$(OBJ):$(SRC)
command...
這樣當添加新的文件的時候只需要對應的添加.c 與 .obj
4.模式匹配
1).rule 1
%.obj:%.c
command...
2).rule 2
.c.obj:
command...
3).編譯當前目錄所有c文件
$(BIN):%.exe:%.obj
4).編譯多個可執行文件
.PHONY:clean all
BIN=a.exe b.exe
all:$(BIN)
這樣當定位到makefile中的第一個target(all)之後, 要生成all就需要生成a.exe b.exe
5.make常用的內嵌函數
$(function arguments)
$(wildcard 模式)
當前目錄下匹配模式的文件: src=$(wildcard *.c) ---> 獲取所有.c文件
$(src:%.c=%.o), 替換後綴名
OBJ=$(src:%.c=%.o)
第一篇blog就這樣完了。
後面會貼上自己需要編譯的文件結構以及對應的makefile
是a