1.makefile語法
由一組依賴關系和規則組成。
myapp: main.o 2.o 3.o
gcc -o myapp main.o 2.o 3.o
main.o: main.c a.h
gcc -c main.c
2.o: 2.c a.h b.h
gcc -c 2.c
3.o: 3.c b.h c.h
gcc -c 3.c
2. make命令參數和選項
-k:發現錯誤繼續編譯
-n:輸出要執行的步驟但不執行
-f:指定makefile的名字
3.注釋
以#開頭
4.宏
通過語句 MACRONAME=value 定義
引用方法為 $(MACRONAME) 或 ${MACRONAME}
一些特殊的內置宏:
$? 列出當前目標所依賴的文件列表中比當前文件還要新的文件
$@ 當前目標的名字
$< 當前依賴文件的名字
$* 不包括後綴名的當前依賴文件的名字
5.多個目標
建議在makefile開始處定義all,如:
all: myapp
使用shell命令時:在每行末尾加"\"
兩個特殊符號的作用:
-: 告訴makefile忽略所有的錯誤
@: 告訴make在執行某條命令前不該將命令本身輸出到標准輸出,有輸出時用:echo
兩個shell命令之間如果有"與關系",中間加"&&"
6.內置規則
7.後綴和模式規則
%.cpp: %o
$(CC) -xc++ $(CFLAGS) -I$(INCLUDE) -c $<
8.歸檔文件(靜態庫)
$(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o)
$(AR) $(ARFLAGS) $@ $<
9.子目錄
mylib.a:
(cd mylibdirectory;$(MAKE))
或者
mylib.a: mydir/2.o mydir/3.o
ar -rv mylib.a $?
10.創建依賴關系
gcc -MM main.c 2.c 3.c