所以我有一个变量:
PROGS = element0 \
element1
Run Code Online (Sandbox Code Playgroud)
我有每个变量:
element0_SRCS = src/xxx.c src/q.c
element1_SRCS = src/xxx.c src/z.c
Run Code Online (Sandbox Code Playgroud)
如果我有另一组变量,那么我可以很容易地做我想做的事情:
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
Run Code Online (Sandbox Code Playgroud)
但是,我想消除"_OBJS"变量的需要并使用_SRCS变量.我可以用每个编程做这个人:
element0_prog : $(element0_SRCS:.c=.o)
Run Code Online (Sandbox Code Playgroud)
尽管使用第二次扩展来重新创建%_prog规则的各种尝试都失败了.
$$($$*_SRCS:.c=.o) ==>目标模式不包含'%'
$$(patsubst %.c,%.o,$$($$*_SRCS)) ==>使用.c文件而不是.o文件构建目标.
在这里几乎不知所措.
使用静态模式规则:
prog_objs = $($*_SRCS:.c=.o)
.SECONDEXPANSION:
$(ALL_PROGS) : %_prog : $$(prog_objs)
gcc - blah blah
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |