[英]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
然后subst
上csv
会做错误的事情。
我建议您使用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.