简书链接:make文件操作相关方法函数传参
文章字数:793,阅读全文大约需要3分钟

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #本例子学习了函数的调用以及字符串如何进行替换的方法。 #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
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 格 查找的文本 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)
|
