APPS = a b c
a_OBJ = x.o y.o z.o
b_OBJ = p.o q.o r.o
c_OBJ = s.o t.o k.o
all:
for i in $(APPS); \
do
echo $("$${i}_OBJ"); \
done;
在上面给出的Makefile示例中,我想在for循环中打印obj文件列表,但列表没有像预期的那样展开,我到底缺少了什么以使OBJ列表正确展开。
.ONESHELL:
all:
# etc.
但是如果你尝试这样做,你会发现Bash会执行
for i in a b c; \
do
echo ; \
done;
在将行发送到shell之前,Make将$("$${i}_OBJ")
扩展为空字符串,因为没有名为"${i}_OBJ"
的变量。
您需要像以下示例一样在发送变量之前进行扩展:
APPS = a b c
a_OBJ = x.o y.o z.o
b_OBJ = p.o q.o r.o
c_OBJ = s.o t.o k.o
all: $(APPS)
$(APPS):
@echo $($@_OBJ)