是否可以从make
中的字符串(在我的情况下为路径名)中删除前缀?
作为示例,假设我有字符串:
FILES = a/b/c.d a/b/e.f
我想删除a/
,并留下b/c.d b/e.f
我曾尝试使用dir
中的notdir
,basename
和GNU make manual的各种组合,但似乎没有一个提供好的解决方案。
$(dir $(FILE)) # a/b a/b
$(notdir $(FILE)) # c.d e.f
$(basename $(FILE)) # a/b/c a/b/e
到目前为止,我发现这样做的唯一方法是:
$( join $(basename $(dir $(FILE))), $(notdir $(FILE)) )
这真是丑陋而漫长。我真正需要的是某种$(removeprefix ...)
功能。假设我知道要删除的前缀(a/
),可以通过某种字符串操作来完成吗?
由于您说了GNU make,为什么不这样:
$(FILE:a/%=%)
?
您应该尝试
$(patsubst a/%,%,$(FILE))
$(patsubst pattern,replacement,text)
:
在文本中的查找用空格分隔单词与模式匹配,并将其替换为替换。此处的模式可能包含一个用作通配符的“%”,匹配单词中任意数量的任何字符。 如果替换也包含'%',则将'%'替换为与'%'模式匹配的文本。这样,仅处理模式和替换中的第一个“%”;随后的所有“%”均保持不变。
patsubst函数调用中的'%'个字符可以用前面的反斜杠('\')引起来。否则会引用“%”字符的反斜杠可以使用更多的反斜杠进行引用。在比较文件名或将词干替换为模式之前,将从模式中删除引用“%”字符或其他反斜杠的反斜杠。没有引号'%'的危险的反斜杠不会被删除。例如,模式'\%weird \%pattern \在运算符'%'字符之前具有'the%weird \',在其后是'pattern \'。最后两个反斜杠不受影响,因为它们不会影响任何'%'字符。
单词之间的空格被折叠成单个空格字符;前导和尾随空白将被丢弃。