You need to enable JavaScript to run this app. 如何在Makefile的一个recipe中循环调用另一个recipe并修复相关报错
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile的一个recipe中循环调用另一个recipe并修复相关报错

Makefile 报错修复方案

错误原因

你的写法存在两个核心问题:

  • run_experiment1是Makefile内部定义的目标,不是系统可执行命令,直接在shell循环中调用会提示找不到命令。
  • 变量转义逻辑错误:Makefile会优先解析${k}作为自身变量,你没有提前定义该变量就会被展开为空,同时shell循环内的变量没有正确转义,导致无法拿到循环中的k值。

修复后的Makefile

# 声明伪目标,避免存在同名文件时目标不执行
.PHONY: run_experiment1 run_all_experiments

run_experiment1:
	python some_file.py \
		--data_file /somewhere/here \
		--k ${k}

run_all_experiments:
	for k in 1 2 3 4 5 ; do \
		$(MAKE) run_experiment1 k=$$k ; \
	done

改动说明

  • 新增.PHONY声明两个目标为伪目标,排除目录下存在同名文件导致的执行异常。
  • 循环内使用$(MAKE)调用当前make进程执行run_experiment1目标,解决命令找不到的问题。
  • 传参处写为k=$$k:两个$是Makefile的转义写法,Makefile解析后会传给shell一个$,shell执行时就能正确读取循环变量k的值,再作为参数传给make赋值给内部的${k}变量,解决参数为空的问题。

注意事项

Makefile的所有规则行缩进必须使用Tab,不能用空格,复制代码时请确认缩进格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:36:06