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