您好,登錄后才能下訂單哦!
A.變量值的替換
1.使用指定字符(串)替換變量中的后綴字符(串)
2.語法格式:$(var:a=b) (將a替換成b)
a.替換表達式中不能有任何的空格
b.make中支持使用${}對變量進行取值
示例
src:=a.cc b.cc c.cc
obj:=$(src:cc=o)
test:
@echo "obj=>$(obj)"
輸出結果
由上圖可以看出變量值的替換
B.變量的模式替換
1.使用%保留變量值中的指定字符,替換其它字符
2.語法格式:$(var:a%b=x%y)
a.替換表達式中不能有任何的空格
b.make中支持使用${}對變量進行取值
示例
src:=a1b.c a2b.c a3b.c
obj:=$(src:a%b.c=x%y)
test:
@echo "obj=>$(obj)"
輸出結果
C.變量值的嵌套引用
1.一個變量名之中可以包含對其它變量的引用
2.嵌套引用的本質是使用一個變量表示另一個變量
如圖所示
D.命令行變量
1.運行make時,在命令行定義變量
2.命令行變量默認覆蓋makefile中定義的變量
示例及運行結果
E.override關鍵字
1.用于指示makefile中定義的變量不能被覆蓋
2.變量的定義和賦值需要使用override關鍵字
示例及運行結果
F.define關鍵字
1.用于在makefile中定義多行變量
2.多行變量的定義從變量名開始到endef結束
3.可使用override關鍵字防止變量被覆蓋
4.define定義的變量等價于使用=定義的變量
示例及運行結果
A.makefile中支持條件判斷語句
1.可以根據條件的值來決定make的執行
2.可以比較兩個不同變量或者變量和常量值
需要注意的是:條件判斷語句只能用于控制make實際執行的語句;但是,不能控制規則中命令的執行過程
條件判斷的關鍵字有四種:
關鍵字 | 功能 |
---|---|
ifeq | 判斷參數是否相等,相等為true,否則為false |
ifneq | 判斷參數是否不相等,不相等為true,否則為false |
ifdef | 判斷變量是否有值,有值為true,否則為false |
ifndef | 判斷變量是否沒有值,沒有值為true,否則為false |
注意:
1.條件判斷語句之前可以有空格,但不能有Tab字符
2.在條件語句中不要使用自動變量($^,$<)
3.一條完整的條件語句必須位于同一個makefile中
4.條件判斷類似C語言中的宏,預處理階段有效,執行階段無效
5.make在加載makefile時(首先計算表達式的值--賦值方式不同,計算方式不同;根據判斷語句的表達式決定執行的內容)
A.makefile中支持函數的概念
1.make解釋器提供了一系列的函數供makefile調用
2.在makefile在支持自定義函數實現,并調用執行
3.通過define關鍵字實現自定義函數
B.自定義函數的語法
深入理解自定義函數
1.自定義函數是一個多行變量,無法直接調用
2.自定義函數時一種過程調用,沒有任何的返回值
3.自定義函數用于定義命令集合,并應用于規則中
示例及運行結果
注意:$(call func2, mylove, dandanxiaohai)對應于func2中的三個參數,通過call進行調用
C.make解釋器中的預定義函數
1.make的函數提供了處理文件名,變量和命令的函數
2.可以在需要的地方調用函數來處理指定的參數
3.函數在調用的地方被替換為處理結果
預定義函數的調用
示例及運行結果
.PHONY : test
define func1
@echo "My name is $(0)"
endef
define func2
@echo "My name is $(0)"
endef
var1 := $(call func1)
var2 := $(call func2)
var3 := $(abspath ./)
var4 := $(abspath test.cpp)
test :
@echo "var1 => $(var1)"
@echo "var2 => $(var2)"
@echo "var3 => $(var3)"
@echo "var4 => $(var4)"
分析:
1.makefile中不支持真正意義上的自定義函數
2.自定義函數的本質時多行變量
3.預定義的call函數在調用時將參數傳遞給多行變量
4.自定義函數是call函數的實參,并在call中被執行
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。