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

Makefile中使用自动变量$*匹配字符串不生效如何解决

你编写的代码无法正常运行的核心原因是:ifeq 属于 Makefile 解析阶段 执行的条件判断语法,而自动变量 $* 只有在规则的 执行阶段 才会被赋值,解析阶段 $* 是空值,因此你的匹配判断永远不会生效。

正确的实现可以选择以下两种方案:

方案1:使用Shell层判断

把匹配逻辑放到规则的执行命令中,此时$*已经完成赋值:

build: build-hello

build-%:
	@if [ "$*" = "hello" ]; then \
		echo Hello; \
	else \
		echo World; \
	fi

注意事项:

  • 规则内的命令必须以Tab字符开头缩进
  • 跨行的Shell命令需要用反斜杠\转义换行,保证所有语句在同一个Shell进程中执行
  • 开头的@作用是避免命令本身被打印到终端,不需要可以删除

方案2:使用Make函数实现判断

也可以用Make内置的if和filter函数在执行阶段完成匹配,写法更简洁:

build: build-hello

build-%:
	@echo $(if $(filter hello,$*),Hello,World)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:45:04