在 makefile 檔案中,常使用變數來表示檔名,這樣更加方便.
定義變數,形式如:變數 = 檔名1 檔名2
;
使用變數,形式如:$(變數)
等效為:檔名1 檔名2
;
make 中變數的使用機制類似於 c/c++ 中#define
的使用機制;
乙個小例子:
# 定義變數
obj = a.o b.o
test : $(obj) # 等效於 test : a.o b.o
cc -o test $(obj)
a.o = a.c a.h
cc -c a.c
b.o : b.c
cc -c b.c
注意:makefile 中變數的命名可以使用字元、數字和下劃線,但是要注意變數名對大小寫是敏感的。
通過=
來實現:常規定義
這是最常見的使用方式,例子如下:
a1 = $(a2) // 可以使用 a2 來定義 a1
a2 = $(a3)
a3 = a.o
通過這種方式可以看到,前面的變數可以通過後面的變數來實現,但是要防止出現死迴圈;
**通過 `:=` 來實現:受限常規定義** 這種方式不允許前面的變數通過後面的變數進行定義
# 正確的使用方式
a1 := a.o
a2 := $(a1) b.o
# 錯誤的使用方式
a1 := $(a2) b.o // 不允許使用 a2 來定義 a1
a2 = a.o
**通過 `+=` 來實現:追加定義** `+=` 可以實現變數追加的效果.
# 方式1
a1 = a.o
a1 += b.o # 等效於 a1 為 a.o b.o
# 方式2
a1 = a.o
a1 := $(a1) + b.o
通過?=
的方式:條件定義
a1 := a.o
a1 ?= b.o # 如果 a1 未定義,則 a1 := b.o;否則,沿用 a1 以前的定義;所以此處 a1 := a.o
我們可以在執行 makefile 檔案時,給內部變數重新賦值,如下所示:
isarm = no
ifeq ($(isarm), yes)
echo "using the cross-compilation tool"
else
echo "using gcc-compilation"
endif
make和Makefile中的規則和變數
make機制的執行環境需要乙個命令列程式make和乙個文字檔案makefile。make命令執行後有3個退出碼 make的使用格式是 make options target options為make工具的引數選項,target為makefile中指定的目標。make 工具的引數選項 選項含義 f f...
make變數和shell變數的比較
一.變數名 make變數名是不包括 前置空白和尾空白的任何字串。shell中的變數名和c語言中的要求一樣,即只能是字母,數字和下劃線,且 第乙個字元不能是數字 二.定義 shell中也可以巢狀定義,如 var yanghua is good man var1 var 和make不同,shell中引用...
make使用的規則,變數等
1.makefile的規則 很多時候我們要編譯的檔案都是很大的,而這就要求我們可能去開啟檔案的原始碼自己去發現關係,這樣做是繁瑣的,也不能保證其正確性。我們當然希望能都自動表達檔案的依賴關係,編譯器可以做這個工作。當編譯器做這個工作時,他能知道應該包含什麼樣子的標頭檔案,當使用gcc時,用 m開關,...