makefile for循环赋值
时间: 2023-10-17 22:19:54 浏览: 232
在 Makefile 中,可以使用 for 循环来赋值变量。下面是一个示例 Makefile:
```
# 定义一个空字串变量
EMPTY :=
# 定义一个列表变量
LIST := a b c d e
# 使用 for 循环给变量赋值
for-each = $(foreach var,$(1),$(2))
# 使用 for 循环将列表变量转换成以逗号分隔的字符串
LIST_STR := $(call for-each,$(LIST),$(var)$(if $(findstring $(var),$(EMPTY)),,$(comma)))
comma := ,
# 打印列表变量和字符串变量
all:
@echo "LIST: $(LIST)"
@echo "LIST_STR: $(LIST_STR)"
```
在上面的示例中,使用 for-each 函数来定义一个 for 循环,其参数列表为:要迭代的变量列表和要执行的命令。然后,将列表变量转换成以逗号分隔的字符串,使用 call 函数来调用 for-each 函数。在 for-each 函数中,$(var) 表示当前迭代的变量,$(if ...) 表示如果当前变量为空,则不添加逗号,否则添加逗号。
运行 `make` 命令后,将会输出:
```
LIST: a b c d e
LIST_STR: a,b,c,d,e
```
相关问题
makefile 循环赋值
Makefile 中可以使用循环语句来赋值,常用的循环语句有 for 和 foreach。其中,for 循环的形式为:
```makefile
$(foreach var, list, text)
```
其中,var 是变量名,list 是变量值列表,text 是要执行的命令或变量赋值语句。
具体来说,我们可以使用 for 循环来给变量赋值,例如:
```makefile
# 定义一个变量 DIRS,它的值为 a b c
DIRS := a b c
# 定义一个变量 OBJS,它的值为 a.o b.o c.o
OBJS := $(foreach dir, $(DIRS), $(dir).o)
# 输出变量 OBJS 的值
$(info OBJS: $(OBJS))
```
其中,$(dir).o 表示在变量 dir 后面添加 .o 后缀,因此 $(OBJS) 的值为 a.o b.o c.o。
除了 for 循环,还可以使用 foreach 循环,它的形式为:
```makefile
$(varname) := $(foreach var, list, text)
```
其中,varname 是变量名,list 是变量值列表,text 是要执行的命令或变量赋值语句。具体来说,我们可以使用 foreach 循环来给变量赋值,例如:
```makefile
# 定义一个变量 DIRS,它的值为 a b c
DIRS := a b c
# 定义一个变量 OBJS,它的值为 a.o b.o c.o
$(foreach dir, $(DIRS), $(eval OBJS += $(dir).o))
# 输出变量 OBJS 的值
$(info OBJS: $(OBJS))
```
其中,$(eval OBJS += $(dir).o) 表示将 $(dir).o 追加到 OBJS 变量的末尾。因此,$(OBJS) 的值为 a.o b.o c.o。
阅读全文