MAKEFILE文件使用說明:linux
shell下執行make,查找文件的順序以下GNUmakefile => makefile => Makefile,一般狀況都是用Makefile來命名shell
make -f xxx ,-f是指定文件名macos
make 默認執行Makefile的第一個目標函數
make 後面的參數能夠給文件裏面的變量賦值,如make TARGET=allui
簡單事例:lua
事例一,內含多個目標構建:spa
事例二,pbc在mac與linux下的構建:命令行
以下就是一個簡單的目標實例:TARGET是目標,pbc-lua53.c是依賴,命令行Tab鍵開頭orm
$(TARGET) : pbc-lua53.cblog
$(CC) $(CFLAGS) -shared -o $@ -I../.. -I$(LUADIR) $^ -L../../build -lpbc
Makefile文件能夠包含多個規則,當第一個規則的命令在執行的時候發現沒有相應的依賴,就從後面的規則中尋找。
最前面的規則是終極目標必定寫在最前面,也就是最後要生成的文件。
例,Makefile的內容以下,包含條件表達式:
ifdef DEFINE_VRE
VRE = 「Hello World!」
else
endif
ifeq ($(OPT),define)
VRE ?= 「Hello World! First!」
endif
ifeq ($(OPT),add)
VRE += 「Kelly!」
endif
ifeq ($(OPT),recover)
VRE := 「Hello World! Again!」
endif
all:
@echo $(VRE)
敲入如下make命令:
make DEFINE_VRE=true OPT=define 輸出:Hello World!
make DEFINE_VRE=true OPT=add 輸出:Hello World! Kelly!
make DEFINE_VRE=true OPT=recover 輸出:Hello World! Again!
make DEFINE_VRE= OPT=define 輸出:Hello World! First!
make DEFINE_VRE= OPT=add 輸出:Kelly!
make DEFINE_VRE= OPT=recover 輸出:Hello World! Again!
= 與:= 的區別以下
x = foo
y = $(x) bar
x = xyz
執行後y的值爲 xyz bar ,而不是 foo bar 。
x := foo
y := $(x) bar
x := xyz
執行後y的值爲foo bar。