我有一个变量
SRC = file1.csv file2.csv file3.csv
如果我echo $(subst .csv,.,$(SRC))
或echo $(subst csv,,$(SRC))
,我会
file1 file2 file3
我要找的是
file1. file2. file3.
但是GNU会继续剥离点。怎么解决这个问题?
添加:
我的真实路线有这样的额外事情:
SRC = $(shell dir /b /s $(SRC_ROOT)\*.csv))
echo $(subst .csv,.,$(basename $(notdir $(SRC))))
答案 0 :(得分:0)
我同意Etan,你的例子很好。我认为你在现实生活中做的事情与你在这里描述的不同。
我会注意到使用subst
是一个坏主意。如果您有cacsv20.csv
这样的文件,那么subst
上的csv
会做错事。
我建议您使用patsubst
,例如:$(patsubst %csv,%,$(SRC))
ETA:根据更新后的问题,您可能需要:
SRC := $(shell dir /b /s $(SRC_ROOT)\*.csv))
BASE := $(patsubst %csv,%,$(notdir $(SRC)))
使用notdir
取消目录名称,使用patsubst
(不是basename
)删除后缀,因为您要保留尾随句点。
注意我使用:=
而不是=
;除非在非常特殊的情况下,出于性能原因,您在使用:=
时始终要使用$(shell ...)
。
答案 1 :(得分:0)
编辑:谢谢大家,MadScientist是对的,我还有一些额外的$(basename $(notdir
导致问题。以下是我的真实路线以及MadScientist的敏锐眼光和评论,我的解决方案如下:
SRC = $(shell dir /b /s $(SRC_ROOT)\*.csv))
echo $(patsubst %csv,%,$(notdir $(SRC)))