具體規則
以特定的文件作爲工作目標和必要條件,比如:
自動變量
VPATH和vpath來指定查找目錄
VPATH和vpath是環境變量,可以來告訴make c、h文件到哪裏找,
有如下目錄結構和test.c
#=====makefile
VPATH = src inc #告訴make c h文件到哪裏找
INC = -Iinc #告訴gcc h文件到哪裏找
test:add.o sub.o test.o
gcc $^ -o $@ $(INC)
test.o:test.c
gcc -c $< -o $@ $(INC)
add.o:add.c add.h
gcc -c $< -o $@ $(INC)
sub.o:sub.c sub.h
gcc -c $< -o $@ $(INC)
.PHONY:clean
clean:
rm -f test.o add.o sub.o test
執行make得到如下結果
對於VPATH,如果多個目錄出現同名文件則make只會找到VPATH中首先出現的目錄,所以可以用vpath來更細化處理文件路徑查找
vpath %.c src #c文件到src查找
vpath %.h inc #h文件到inc查找
模式規則
用文件名模式的匹配來簡化規則的建立,以及提供內置規則來處理他們,主文件名可以用%字符代替,所以上面的makefile可以寫作下面的樣子
#VPATH = src inc #告訴make c h文件到哪裏找
vpath %.c src
vpath %.h inc
INC = -Iinc #告訴gcc h文件到哪裏找
test:add.o sub.o test.c
gcc $^ -o $@ $(INC)
%.o:%.c %.h
gcc -c $< -o $@ $(INC)
.PHONY:clean
clean:
rm -f *.o test
管理程序庫
- 創建程序庫
參數
r表示想以指定的目標文件替換程序庫裏的成員
v表示告訴我們執行了那些動作
t顯示歸檔文件的內容
x從歸檔文件中解壓文件,利用選項-o可以指定解壓的文件,如ar -x libaddsub.a -o add.o
顯示信息
a表示目標文件已被添加到程序庫中
r表示目標文件已被替換到程序庫中
- 程序庫的使用
方法1,帶上路徑使用全稱
方法2,去掉前綴後綴加上-l
選項,用-L
指定路徑