Make 中的變數

2021-09-26 14:42:10 字數 1478 閱讀 2549

在 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開關,...