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

如何在Makefile的Shell循环中通过索引访问数组?

解决Makefile循环遍历变量元素的问题

你的Makefile存在几个问题:

  • Make本身没有数组类型,${MONTH[$${m}]}这种数组引用语法不生效
  • 第二个run目标里,$(word $$m, ${MONTH})在Make解析阶段会把$$转成$,变成$(word $m, ...),但此时$m是shell变量,Make无法提前解析出对应位置的元素
  • 两个同名的run目标,Make只会执行最后定义的那个,前面的规则会被覆盖

以下两种方案可以实现你想要的输出:

方案一:用Make的foreach预生成命令

利用Make的foreach循环遍历索引,提前生成每一条echo命令,再交给shell执行:

MONTH := jan feb mar
DATE := 01 03 05

run:
	$(foreach idx, 1 2 3, \
		echo "Info : MONTH = $(word $(idx), $(MONTH))"; \
		echo "Info : DATE  = $(word $(idx), $(DATE))"; \
	)

方案二:交给Shell数组处理

将Make变量转为Shell数组,在Shell循环中遍历索引取值:

MONTH := jan feb mar
DATE := 01 03 05

run:
	@months=($(MONTH)); dates=($(DATE)); \
	for m in 0 1 2; do \
		echo "Info : MONTH = $${months[$m]}"; \
		echo "Info : DATE  = $${dates[$m]}"; \
	done

执行make run后,两种方案都会输出:

Info : MONTH = jan
Info : DATE  = 01
Info : MONTH = feb
Info : DATE  = 03
Info : MONTH = mar
Info : DATE  = 05

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:50:00