變數的應用(下)
1. 環境變數(全域性變數)
- makefile中能夠直接使用環境變數的值
定義了同名變數,環境變數將被覆蓋
執行make時指定"-e"選項,優先使用環境變數
示例1
LOGNAME := other
test :
@echo "LOGNAME => $(LOGNAME)"
複製程式碼
在Makefile中使用環境變數的優缺點:
優勢:
環境變數可以在所有makefile中使用
劣勢:
過多的依賴於環境變數會導致移植性降低
2. 變數在不同makefile之間的傳遞方式
- 直接在外部定義環境變數進行傳遞
- 使用export定義變數進行傳遞(定義臨時環境變數)
- 定義make命令列變數進行傳遞(推薦)
示例2_1--直接在外部定義環境變數進行傳遞 makefile
LOGNAME := other
test :
@echo "LOGNAME => $(LOGNAME)"
@echo "make another file"
@$(MAKE) -f makefile2
複製程式碼
makefile2
test :
@echo "LOGNAME => $(LOGNAME)"
複製程式碼
示例2_2--多個檔案呼叫同一個變數不使用export makefile
var := var_start
test :
@echo "make another file"
@$(MAKE) -f makefile2
複製程式碼
makefile2
test :
@echo "var => $(var)"
複製程式碼
示例2_3--使用export定義變數進行傳遞 makefile
export var := var_start
test :
@echo "make another file"
@$(MAKE) -f makefile2
複製程式碼
makefile2
test :
@echo "var => $(var)"
複製程式碼
示例2_4--定義make命令列變數進行傳遞 makefile
var := var_start
test :
@echo "make another file"
@$(MAKE) -f makefile2
@$(MAKE) -f makefile2 var:=$(var)
複製程式碼
makefile2
test :
@echo "var => $(var)"
複製程式碼
3. 目標變數(區域性變數)
- 作用域只在指定目標及連帶規則中
target : name <assignment> value
target : override name <assignment> value
複製程式碼
示例3_1-目標變數,無依賴關係
var := var_start
test : var := var_test
test :
@echo "test:"
@echo "var => $(var)"
another :
@echo "another:"
@echo "var => $(var)"
複製程式碼
示例3_2-目標變數,連帶依賴
var := var_start
test : var := var_test
test : another
@echo "test:"
@echo "var => $(var)"
another :
@echo "another:"
@echo "var => $(var)"
複製程式碼
4. 模式變數
- 模式變數是目標變數的擴充套件
- 作用域只在符合模式的目標及連帶規則中
pattern : name <assignment> value
pattern : override name <assignment> value
複製程式碼
示例4_1-模式變數-無依賴關係
new := new_start
%e : override new := new_test
test :
@echo "test:"
@echo "new => $(new)"
another :
@echo "another:"
@echo "new => $(new)"
rule :
@echo "rule:"
@echo "new => $(new)"
複製程式碼
示例4_2-模式變數-連帶依賴
new := new_start
%e : override new := new_test
test : another
@echo "test:"
@echo "new => $(new)"
another :
@echo "another:"
@echo "new => $(new)"
rule :
@echo "rule:"
@echo "new => $(new)"
複製程式碼
小結
- makefile中的三種變數:
- 全域性變數:makefile外部定義的環境變數
- 檔案變數:makefile中定義的變數
- 區域性變數:指定目標的變數