从gnu make的列表中删除模式前缀

时间:2018-11-09 20:03:03

标签: makefile gnu-make

如果我有文件列表:

.catch

有什么方法可以删除列表中最后一个下划线之前的所有内容,以获得files := xx_foo1.c yy_foo2.c zz_bar1.c aa_bb_bar2.c

我一直在考虑使用foo1.c foo2.c bar1.c bar2.c,但是我需要两个patsubst-一个用于忽略第一部分,一个用于保留最后一部分。

3 个答案:

答案 0 :(得分:2)

可以做到,但有点毛病。您想要这样的东西:

SET @query = "SELECT ?('?') FROM table";  
EXECUTE stmt USING 'count', 'id';

这表示,对于final := $(foreach F,$(files),$(word $(words $(subst _, ,$F)),$(subst _, ,$F))) 中的每个元素,我们都将files转换为空格,现在我们可以使用每个单词的函数来操作它:提取单词列表中的最后一个单词。

ETA ReAl在下面指出,可以使用_对此进行简化:

lastword

答案 1 :(得分:2)

如我所见,您使用下划线作为层次结构名称之间的分隔符。如果字符为/:文件名功能,GNUmake可以很好地使用这种方案。

所以您的示例应该简单地归结为

$(notdir $(subst _,/,$(files))

答案 2 :(得分:0)

使用外部程序sed并享受其所有功能

files := xx_foo1.c yy_foo2.c zz_bar1.c aa_bb_bar2.c
f := `echo $(files) | sed -e "s/[[:alnum:]]*_//g"`

all:
    echo $(f)