容器内Python脚本通过Makefile传参执行后出现Make规则错误
解决Makefile传递额外参数后报错的问题
当你执行make deploy server project时,Python脚本能正常运行,但之后出现make: *** No rule to make target 'server'. Stop.错误,原因是make会把命令行中所有非目标的参数也当作要构建的目标。执行完deploy规则后,它会尝试寻找server和project对应的构建规则,找不到就报错。
下面是两种可行的解决方法:
方法一:添加通用空规则
在Makefile中添加一个匹配任意目标的空规则,让make忽略找不到规则的参数:
.PHONY: deploy % deploy: @docker exec -it ecosystem python3 deployment/deploy.py $(filter-out $@,$(MAKECMDGOALS)) # 匹配所有无规则的目标,执行true命令(无操作且返回成功) %: @true
这样修改后,直接执行make deploy server project即可,make会在跑完deploy后,用这个通用规则处理server和project,不会报错。
方法二:用--分隔目标与参数
修改执行命令,用--明确区分make的目标和要传递给脚本的参数:
make deploy -- server project
同时调整Makefile中的参数过滤逻辑,去掉--这个分隔符:
.PHONY: deploy deploy: @docker exec -it ecosystem python3 deployment/deploy.py $(filter-out $@ --,$(MAKECMDGOALS))
这种方式更清晰,明确告诉make哪些是目标,哪些是传递给脚本的参数。
内容的提问来源于stack exchange,提问作者David Goglidze
相关产品推荐
相关产品推荐

