如果我有文件列表:
.catch
有什么方法可以删除列表中最后一个下划线之前的所有内容,以获得files := xx_foo1.c yy_foo2.c zz_bar1.c aa_bb_bar2.c
?
我一直在考虑使用foo1.c foo2.c bar1.c bar2.c
,但是我需要两个patsubst
-一个用于忽略第一部分,一个用于保留最后一部分。
答案 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)