You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile字符串替换失效求助:无法将kvvm60替换为main

Makefile中patsubst替换失效的原因及解决方法

问题根源

你使用的patsubst是模式匹配替换函数,它的规则是:模式中的第一个%作为通配符匹配任意非空字符序列,后续的%会被当作普通字符处理。你写的%kvvm60%模式,实际是在匹配“任意字符序列 + kvvm60 + %”的字符串,而你的路径/home/kvvm60/foo/bar结尾没有%,完全匹配失败,因此不会执行替换。

另外,输出末尾的make: *** No targets. Stop.是因为你的Makefile没有定义任何可执行目标,Make不知道要完成什么任务。

解决方法

方法一:用subst做子串替换(推荐)

如果你只是想替换字符串中特定子串,不管它的位置,直接用subst函数即可,它会全局替换所有匹配的子串:

hello:= /home/kvvm60/foo/bar

$(info inside hello $(hello))

TEST := $(subst kvvm60,main,$(hello))

$(info test is $(TEST))

# 添加空目标解决无任务报错
all:
	@echo Done

方法二:修正patsubst的匹配模式

如果一定要用patsubst,需要根据路径结构编写正确的模式。比如针对你的路径,可以这样写:

hello:= /home/kvvm60/foo/bar

$(info inside hello $(hello))

# 匹配"任意字符序列 + kvvm60/",替换为"对应字符序列 + main/"
TEST := $(patsubst %kvvm60/,%main/,$(hello))

$(info test is $(TEST))

all:
	@echo Done

内容的提问来源于stack exchange,提问作者kathy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:32