GNU make:从模式匹配变量中获取的源列表中的目标文件列表

时间:2012-05-21 19:05:45

标签: gnu-make

所以我有一个变量:

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变量。我可以用每个编程做这个人:

element0_prog : $(element0_SRCS:.c=.o)

使用第二次扩展来重新创建%_prog规则的各种尝试都失败了。

$$($$*_SRCS:.c=.o) ==>目标模式不包含'%'

$$(patsubst %.c,%.o,$$($$*_SRCS)) ==>使用.c文件而不是.o文件构建目标。

在这里几乎不知所措。

1 个答案:

答案 0 :(得分:5)

使用static pattern规则:

prog_objs = $($*_SRCS:.c=.o)

.SECONDEXPANSION:
$(ALL_PROGS) : %_prog : $$(prog_objs)
    gcc - blah blah