所以我有一个变量:
PROGS = element0 \
element1
我有每个变量:
element0_SRCS = src/xxx.c src/q.c
element1_SRCS = src/xxx.c src/z.c
如果我有另一组变量,那么我可以很容易地做我想做的事:
element0_OBJS = src/xxx.o src/q.o
element1_OBJS = src/xxx.o src/z.o
ALL_PROGS = $(foreach p, $(PROGS), $(p)_prog)
all : $(ALL_PROGS)
.SECONDEXPANSION:
%_prog : $$($$*_OBJS)
gcc - blah blah
但是,我想消除对“_OBJS”变量的需要并使用 _SRCS 变量。我可以对每个 prog 做这个人:
element0_prog : $(element0_SRCS:.c=.o)
尽管多次尝试使用第二个扩展来重新创建 %_prog 规则,但都失败了。
$$($$*_SRCS:.c=.o)
==> 目标模式不包含 '%'
$$(patsubst %.c,%.o,$$($$*_SRCS))
==> 使用 .c 文件而不是 .o 文件构建目标。
在这里几乎是不知所措。