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
相关产品推荐
相关产品推荐

