如何在Makefile中获取已定义列表的指定单个元素?
Makefile 列表元素提取方案
GNU Make 不支持 ${FILES[0]} 类数组下标取值语法,需通过内置的word函数实现指定位置元素提取:
- 函数语法:
$(word <索引>, <目标列表>),注意索引从1开始计数,而非0 - 提取第一个元素:
$(word 1, $(FILES)) - 提取第二个元素:
$(word 2, $(FILES))
示例代码
调整后的实现代码如下:
FILES:= file0 \ file1 all: $(FILES) # 用法示例:直接使用提取到的第一个元素 $(FILES): echo "write on file 0 something" > "$(word 1, $(FILES))" echo "write on file 1 something else" > "$(word 2, $(FILES))"
补充说明
- 如果你是需要在生成对应文件的规则里获取当前目标的文件名,直接使用自动变量
$@即可,无需手动提取列表元素,写法更简洁:$(FILES): echo "write on $@ something" > $@ - 如果需要提取连续的多个元素,可以使用
wordlist函数,语法为$(wordlist <起始索引>, <结束索引>, <目标列表>),例如提取前两个元素写为$(wordlist 1, 2, $(FILES)) - 若指定的索引大于列表总长度,
word函数会返回空值,使用前需确认索引取值合法
内容的提问来源于stack exchange,提问作者Odd Kviteberg
相关产品推荐
相关产品推荐

