如何在GNU Make中保留文件名中的点

时间:2014-01-10 10:00:07

标签: windows makefile gnu

我有一个变量

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))))

2 个答案:

答案 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)))