image.png
#本例子學(xué)習(xí)了函數(shù)的調(diào)用以及字符串如何進(jìn)行替換的方法宛渐。
#dir 方法可以傳遞任意多個(gè)參數(shù)將返回一個(gè)不帶文件的目錄。
#如下打印結(jié)果為fileopera.mk:3: ./ / ../ ../../ 可以得出結(jié)論是獲取相對(duì)目錄,而不是磁盤轉(zhuǎn)換的目錄。
MY_VAR:=$(dir src /foo.c ../test.a ../../my.a)
$(warning 測(cè)試取目錄函數(shù) $(MY_VAR))
MY_VAR1:=$(notdir /a/t.txt /foo.c ../test.a ../../my.a)
# 提取文件名 不包含路徑
$(warning 測(cè)試取文件名函數(shù)$(MY_VAR1))
#提取后綴數(shù)組
MY_VAR1:=$(suffix /aa/ttt.txt ../aa/fff.c)
$(warning 測(cè)試去后綴函數(shù) $(MY_VAR1))
#提取攜帶相對(duì)路徑攜帶文件名但是不帶后綴。
MY_VAR1:=$(basename /aa/ttt.txt ../aa/fff.c)
$(warning 提取basename函數(shù) $(MY_VAR1))
#添加后綴函數(shù)返回的是包含全部路徑的文件名。 只能傳遞兩個(gè)參數(shù),第一個(gè)參數(shù)是后綴第二個(gè)是路徑沛硅,指定多個(gè)路徑用空格隔開
MY_VAR1:=$(addsuffix .txt,aa bb)
$(warning 測(cè)試添加后綴函數(shù) $(MY_VAR1))
#給所有文件或者文件路徑在前面再添加路徑 只支持傳遞兩個(gè)參數(shù) 操作多個(gè)文件用空格隔開
MY_VAR1:=$(addprefix /sdcard/,tencent qssq666)
$(warning 測(cè)試添加前綴函數(shù)添加路徑 $(MY_VAR1))
#給list的每一個(gè)元素加入一個(gè)到前面
MY_VAR1:=$(join a b c,str1 str2 str3)
$(warning 測(cè)試join str 123前面分別插入了abc->$(MY_VAR1))
#測(cè)試 wildcard 通配符實(shí)現(xiàn)獲取當(dāng)前目錄所有mk文件
MY_VAR1:=$(wildcard *.mk)
$(warning 搜索當(dāng)前目錄下所有mk文件 ->$(MY_VAR1))
# 獲取執(zhí)行文件的路徑 (真實(shí)路徑Cygdrive可能結(jié)果有點(diǎn)無法接受) realpath abspath結(jié)果都一樣
MY_VAR1:=$(realpath fileopera.mk)
$(warning 獲取當(dāng)前目錄文件 ->$(MY_VAR1))
MY_VAR1:=$(abspath fileopera.mk)
$(warning 獲取當(dāng)前絕對(duì)路徑文件 ->$(MY_VAR1))
test:
@echo over
image.png
格 查找的文本
specialspace:= #
$(warning 空格[$(space)]空 [$(empty)])
LOCAL_PATH:=$(subst $(space),$(empty),$(mypath)) #這種方法成功刪除了空格
#LOCAL_PATH:=$(subst $(specialspace),$(empty),$(LOCAL_PATH))
# 通配符搜索參數(shù) 遍歷.* walk是啥子?
$(warning 當(dāng)前目錄[$(LOCAL_PATH)])
#下面的方法實(shí)現(xiàn)了遞歸的執(zhí)行绕辖。
define testFunc
$(warning arg1:$(1))
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call testFunc, $(e)))
endef
#$(error 錯(cuò)誤了) 會(huì)導(dǎo)致邏輯終止
$(warning 即將執(zhí)行Test $(LOCAL_PATH) )
VAR1:=$(LOCAL_PATH)/mydir
#調(diào)用testFUnc傳遞一個(gè)參數(shù)為目錄
TEST := $(call testFunc, $(VAR1),fff)#call就已經(jīng)打印了 調(diào)用這種函數(shù)必須加上call,不然達(dá)不到遍歷調(diào)用的效果.
#$(warning $(TEST))
define testFunc1
$(warning called)
$(warning 函數(shù)名$(0)----arg1-$(1)---arg2-$(2)---arg3-$(3)------)
endef #不是endif 而是endef
$(call testFunc1,testa,testb,testc)
image.png