一 :文件目錄
| --func1
| |--func1.cpp
| |--func1.h
| -- func2
| |--func2.cpp
| |--func2.h
| -- main.cpp
| -- makefile
二: 編譯要求
a> 如果工程所有文件都沒(méi)有編譯過(guò),則所有的都需要編譯,并鏈接
b> 如果部分文件被修改,則編譯部分文件 并鏈接目標(biāo)
c> 如果頭文件被修改 只需要編譯引用頭文件的文件并鏈接
三 : 基本格式
target: dependent_file_list
command1
second_target: dependent_file_list
command2
third_target: dependent_file_list
command3
target: 最終生成的目標(biāo)文件 ,
dependent file list: 生成目標(biāo)文件需要的依賴的文件
command: 對(duì)依賴文件操作生成最終文件的命令
四 :實(shí)現(xiàn)
1: 基本實(shí)現(xiàn)
demo: main.o func1.o func2.o
g++ -o demo main.o func1.o func2.o
main.o: main.cpp .\func1\func1.h .\func2\func2.h
g++ -c main.cpp -o main.o
func1.o: .\func1\func1.cpp .\func1\func1.h
g++ -c .\\func1\\func1.cpp -o func1.o
func2.o: .\func2\func2.cpp .\func2\func2.h
g++ -c .\\func2\\func2.cpp -o func2.o
clean:
del demo.exe|del func1.o|del main.o|del func2.o
2:使用變量
在增加新文件時(shí)可減少重復(fù)編寫重復(fù)代碼
objects = main.o func1.o func2.o
demo: $(objects)
g++ -o demo $(objects)
main.o: main.cpp .\func1\func1.h .\func2\func2.h
g++ -c main.cpp -o main.o
func1.o: .\func1\func1.cpp .\func1\func1.h
g++ -c .\\func1\\func1.cpp -o func1.o
func2.o: .\func2\func2.cpp .\func2\func2.h
g++ -c .\\func2\\func2.cpp -o func2.o
clean:
del demo.exe|del func1.o|del main.o|del func2.o
3:自動(dòng)推導(dǎo)
針對(duì) ".o" 文件,make 可自動(dòng)將 ".c"文件加入依賴關(guān)系
objects = main.o func1.o func2.o
demo: $(objects)
g++ -o demo $(objects)
main.o: .\func1\func1.h .\func2\func2.h
# g++ -c main.cpp -o main.o
func1.o: .\func1\func1.cpp .\func1\func1.h
g++ -c .\\func1\\func1.cpp -o func1.o
func2.o: .\func2\func2.cpp .\func2\func2.h
g++ -c .\\func2\\func2.cpp -o func2.o
clean:
del demo.exe|del func1.o|del main.o|del func2.o
五 make語(yǔ)法
make支持shell命令
” * “ 匹配0個(gè)或者任意個(gè)字符
” ?“ 匹配任意一個(gè)字符
” [] “ 匹配制定的字符
” [-] “ 匹配制定的字符
” [^] “ 匹配制定的字符
注:在依賴關(guān)系中不能引用變量
變量的基本賦值
簡(jiǎn)單賦值( := ) ——常規(guī)賦值語(yǔ)句,只對(duì)當(dāng)前語(yǔ)句的變量有效。
遞歸賦值( = )——賦值語(yǔ)句可能影響多個(gè)變量,目標(biāo)改變后,其他變量都受影響
條件賦值( ?= )——如果變量未定義,則使用符號(hào)中值定義變量, 如已賦值,則該賦值語(yǔ)句無(wú)效
追加賦值( += )——原變量用空格隔開的方式追加一個(gè)新值
make 的基本變量
【 $@ 】 表示規(guī)則的目標(biāo)文件名
【 $^ 】 表示規(guī)則中的依賴文件列表
【 $< 】 表示規(guī)則中第一個(gè)依賴文件
make 的Path變量
一般搜索VPATH
可理解為win的環(huán)境變量,以冒號(hào)或者空格隔開
選擇搜索vpath
vpath test.c src : car