Makefile:对变量中具有特定扩展名的文件进行操作

斯文

我正在开发一个 Makefile,它需要能够执行以下操作:

从用户给定的变量 SRVS,包含文件名,例如,

SRVS=Test1.java,test2.c,test3.c,test4.java,test5.c

生成具有特定扩展名的所有文件的列表,供 foreach 循环使用。此列表不应再包含扩展名。目前,我可以解析所有文件并将其放入可用列表中,但无法为扩展名这样做。是)我有的:

    $(foreach SRV, $(shell echo $(SRVS) | tr ',' ' '), \
         CLASSPATH=$(SELF)/default_runtime javac $(UJ_DIR)/services/java/$(SRV).java && \
         find $(UJ_DIR)/services/java/ -iname "$(SRV).class" -type f >> $(SELF)/files && \
) true

这将采用 SRVS 列表并生成可供 foreach 和其中的代码使用的列表。例如,上面的示例将导致 foreach 循环使用“test1 test2 test3 test4 test5”

我现在想指定扩展名,例如.c,这样上面的例子就会产生“test2 test3 test5”。你能帮我吗?

雷诺·帕卡莱

首先,您不需要调用shell(这是无用的慢),因为有 make 内置函数可以执行您想要的操作。如果在变量的定义中SRVS你真的不能用空格(标准的make word 分隔符)而不是逗号分隔你的文件名,subst可以为你做。但是有一个小技巧,因为逗号本身就是 make 函数的参数分隔符:

comma := ,
SRVS1 := $(subst $(comma), ,$(SRVS))

接下来filter是允许按扩展名选择文件的 make 函数:

SRVS2 := $(filter %.c,$(SRVS1))

最后,basename删除后缀:

SRVS3 := $(basename $(SRVS2))

演示:

$ cat Makefile
SRVS=Test1.java,test2.c,test3.c,test4.java,test5.c

comma := ,
SRVS1 := $(subst $(comma), ,$(SRVS))
SRVS2 := $(filter %.c,$(SRVS1))
SRVS3 := $(basename $(SRVS2))

all:
    $(info SRVS1 = $(SRVS1))
    $(info SRVS2 = $(SRVS2))
    $(info SRVS3 = $(SRVS3))

$ make -q
SRVS1 = Test1.java test2.c test3.c test4.java test5.c
SRVS2 = test2.c test3.c test5.c
SRVS3 = test2 test3 test5

或者,一下子:

$ cat Makefile
TAGS := $(basename $(filter %.c,$(subst $(comma), ,$(SRVS))))

all:
    $(info TAGS = $(TAGS))
$ make -q
TAGS = test2 test3 test5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从具有特定扩展名的文件中删除行

遍历文件目录,尝试对C中具有特定扩展名的文件中的行进行计数

Makefile处理具有相同扩展名的文件

如何从具有特定扩展名的文件中获取名称并将其用作批处理脚本中的变量?

Makefile:从变量中按扩展名选择文件

如何删除特定文件夹中具有特定扩展名的所有文件?

获取具有特定扩展名的所有文件

如何遍历文件夹中的文件以移动具有特定扩展名的每个文件

如何从Andorid中的文件夹中删除具有特定扩展名的文件

如何在具有特定扩展名的文件中查找特定文本?

计算具有特定扩展名的特定目录中的文件总数

从多个目录复制具有特定扩展名的文件

打印具有特定扩展名的文件

查找具有特定扩展名的文件

使用 grep 移动具有特定扩展名的文件

Bash脚本检查具有特定扩展名的文件

递归查找具有特定扩展名的文件

删除具有特定扩展名的文件的脚本问题

循环浏览具有特定扩展名的文件

Gradle-删除具有特定扩展名的文件

如何附加到具有特定扩展名的文件

使用Chokidar监视具有特定扩展名的文件

Python递归查找具有特定扩展名的文件

通过regexp删除具有特定扩展名的文件

删除具有特定扩展名的诊断文件的脚本

Python 3中具有特定文件扩展名的临时文件

在Windows 7中搜索具有特定文件扩展名的文件

在cmd中如何列出包含具有特定扩展名的文件的文件夹?

如何在ClearCase中查找已签出且具有特定扩展名文件的文件