makefile學習

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


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