如何避免Makefile执行带参数目标时出现No rule to make target报错
错误原因
该报错的本质是make默认会将命令行传入的所有非选项参数识别为待执行的构建目标,你传入hello、world参数时,make找不到对应目标的构建规则,因此抛出报错。
解决方案1:添加通配空规则(一劳永逸,适配任意参数传入)
直接在现有Makefile末尾追加如下规则即可:
%: @:
规则说明:
%是make的通配符,可匹配所有不存在的目标@:是make内置的空操作命令,执行时无任何输出和实际操作
修改后的完整Makefile示例:
.PHONY: echo echo: @echo "parameters:" $(filter-out $@,$(MAKECMDGOALS)) %: @:
修改后再执行make echo hello world就不会抛出报错,可正常打印传入的参数。
解决方案2:命令行传参时添加标记(无需修改Makefile,适合临时场景)
执行命令时添加--标记,告诉make后续内容不属于目标:
make echo -- hello world
--是GNU make的内置分隔标记,标记后的所有参数不会被识别为构建目标,自然不会触发找不到规则的报错。
内容的提问来源于stack exchange,提问作者Amin Shah Gilani
相关产品推荐
相关产品推荐

