繁体   English   中英

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

[英]How to keep the dot in filename in GNU Make

我有一个变量

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

我同意Etan的观点,您的例子很好用。 我认为您在现实生活中所做的事情与您在此处描述的有所不同。

我会注意,尽管使用subst是一个坏主意。 如果你有像文件cacsv20.csv然后substcsv会做错误的事情。

我建议您使用patsubst ,例如: $(patsubst %csv,%,$(SRC))

预计到达时间:根据更新后的问题,您可能需要:

SRC := $(shell dir /b /s $(SRC_ROOT)\*.csv))
BASE := $(patsubst %csv,%,$(notdir $(SRC)))

使用notdir目录名称,并使用patsubst (不是basename )删除后缀,因为您要保留结尾期间。

注意我正在使用:=而不是= ; 除非在非常特殊的情况下,出于性能原因,在使用$(shell ...)时始终希望使用:=

编辑 :谢谢大家,MadScientist是对的,我还有一些其他的$(basename $(notdir在引起问题的行中。以下是我的真实行,并且在MadScientist敏锐的眼神和评论之下,我的解决方案如下所示:

SRC = $(shell dir /b /s $(SRC_ROOT)\*.csv))
echo $(patsubst %csv,%,$(notdir $(SRC)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM