#本例子学习了函数的调用以及字符串如何进行替换的方法。
#dir 方法可以传递任意多个参数将返回一个不带文件的目录。
#如下打印结果为fileopera.mk:3: ./ / ../ ../../ 可以得出结论是获取相对目录,而不是磁盘转换的目录。
MY_VAR:=$(dir src /foo.c ../test.a ../../my.a)
$(warning 测试取目录函数 $(MY_VAR))
MY_VAR1:=$(notdir /a/t.txt /foo.c ../test.a ../../my.a)
# 提取文件名 不包含路径
$(warning 测试取文件名函数$(MY_VAR1))
#提取后缀数组
MY_VAR1:=$(suffix /aa/ttt.txt ../aa/fff.c)
$(warning 测试去后缀函数 $(MY_VAR1))
#提取携带相对路径携带文件名但是不带后缀。
MY_VAR1:=$(basename /aa/ttt.txt ../aa/fff.c)
$(warning 提取basename函数 $(MY_VAR1))
#添加后缀函数返回的是包含全部路径的文件名。 只能传递两个参数,第一个参数是后缀第二个是路径,指定多个路径用空格隔开
MY_VAR1:=$(addsuffix .txt,aa bb)
$(warning 测试添加后缀函数 $(MY_VAR1))
#给所有文件或者文件路径在前面再添加路径 只支持传递两个参数 操作多个文件用空格隔开
MY_VAR1:=$(addprefix /sdcard/,tencent qssq666)
$(warning 测试添加前缀函数添加路径 $(MY_VAR1))
#给list的每一个元素加入一个到前面
MY_VAR1:=$(join a b c,str1 str2 str3)
$(warning 测试join str 123前面分别插入了abc->$(MY_VAR1))
#测试 wildcard 通配符实现获取当前目录所有mk文件
MY_VAR1:=$(wildcard *.mk)
$(warning 搜索当前目录下所有mk文件 ->$(MY_VAR1))
# 获取执行文件的路径 (真实路径Cygdrive可能结果有点无法接受) realpath abspath结果都一样
MY_VAR1:=$(realpath fileopera.mk)
$(warning 获取当前目录文件 ->$(MY_VAR1))
MY_VAR1:=$(abspath fileopera.mk)
$(warning 获取当前绝对路径文件 ->$(MY_VAR1))
test:
@echo over
格 查找的文本
specialspace:= #
$(warning 空格[$(space)]空 [$(empty)])
LOCAL_PATH:=$(subst $(space),$(empty),$(mypath)) #这种方法成功删除了空格
#LOCAL_PATH:=$(subst $(specialspace),$(empty),$(LOCAL_PATH))
# 通配符搜索参数 遍历.* walk是啥子?
$(warning 当前目录[$(LOCAL_PATH)])
#下面的方法实现了递归的执行。
define testFunc
$(warning arg1:$(1))
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call testFunc, $(e)))
endef
#$(error 错误了) 会导致逻辑终止
$(warning 即将执行Test $(LOCAL_PATH) )
VAR1:=$(LOCAL_PATH)/mydir
#调用testFUnc传递一个参数为目录
TEST := $(call testFunc, $(VAR1),fff)#call就已经打印了 调用这种函数必须加上call,不然达不到遍历调用的效果.
#$(warning $(TEST))
define testFunc1
$(warning called)
$(warning 函数名$(0)----arg1-$(1)---arg2-$(2)---arg3-$(3)------)
endef #不是endif 而是endef
$(call testFunc1,testa,testb,testc)