在Android.mk中百分比符号(%)是什么意思?
在大多数Android.mk文件中,我发现一行运行如下内容:在Android.mk中百分比符号(%)是什么意思?,android,makefile,android-ndk,Android,Makefile,Android Ndk,在大多数Android.mk文件中,我发现一行运行如下内容: LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) file name: /Users/Jeff/dev/path/to/program.c pattern: /Users/Jeff/dev/% 我知道此行采用:=右侧的表达式,并将其分配给符号LOCAL\u SRC\u FILES。我知道$(LOCAL\u PATH)采用LOCAL\u PATH符号的值。但我还有两个问题: %=
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
file name: /Users/Jeff/dev/path/to/program.c
pattern: /Users/Jeff/dev/%
我知道此行采用:=
右侧的表达式,并将其分配给符号LOCAL\u SRC\u FILES
。我知道$(LOCAL\u PATH)
采用LOCAL\u PATH
符号的值。但我还有两个问题:
%=%
部分是关于什么的$(文件列表:…)
表达式中嵌套符号$(本地路径)
有什么意义$(本地路径)
是/Users/Jeff/dev/
。假设$(文件列表)
没有进一步复杂化,它是/Users/Jeff/dev/aaa.c/Users/Jeff/dev/bbb.c/Users/Jeff/dev/ccc
。上述赋值如何为LOCAL\u SRC\u文件
生成有用的值?这是一种语法,用于替换字符串变量的值。在本例中,获取一个字符串列表,对于以/Users/Jeff/dev/
开头的每个字符串,请将前缀去掉
这个技巧通常在Android.mk中使用,因为NDK希望本地_SRC_文件中的文件名与本地_路径相对。Android makefiles打算使用。该文档是可用的,并且应该随您的发行版一起提供 你要问的语法是;基本上,
%
是一个匹配零个或多个字符的通配符,左侧的匹配项替换为右侧的匹配项
因此$(文件列表:$(本地路径)/%=%)
从文件列表
变量值的开头删除字符串$(本地路径)/
(如果有;如果没有,则不进行更改)。如果查看make
文档的部分,文档会向您介绍%
字符。例如,这里有一条规则:
%.o : %.c
recipe
该规则告诉make
如何创建任何.o
文件:make应该查找.c
文件并对其应用配方。在配方中,您可以使用$
foo = a.o b.o c.o
bar := $(foo:%.o=%.c)
$(patsubst pattern,replacement,text)
$(var:pattern=replacement)
$(FILE_LIST:$(LOCAL_PATH)/%=%)
var => FILE_LIST
pattern => /Users/Jeff/dev/% # $(LOCAL_PATH) is /Users/Jeff/dev/
replacement => %
/Users/Jeff/dev/path/to/program.c
file name: /Users/Jeff/dev/path/to/program.c
pattern: /Users/Jeff/dev/%