(GNU Makefile)
我想要一个使用命名约定lib*.so
构建任何库的目标,并且依赖于变量中指定的目标文件列表。
E.g。构建libabc.so
取决于变量.o
中的abc_OBJS
个文件。
我尝试了lib%.so: $($(%)_OBJS)
,但那不对。
语法是什么?
答案 0 :(得分:1)
我猜你不能这样做。 GNU Make manual明确指出:
请注意,在模式规则中使用'%'进行扩展在之后发生 变量或函数扩展,在makefile时发生 读取。
.SECONDEXPANSION
让它发挥作用! (注意它不是SECONDARY,而是SECOND)
以下Makefile
:
abc_OBJS=a.o b.o c.o
def_OBJS=d.o e.o f.o
%.o:
touch $@
.SECONDEXPANSION:
lib%.so: $$(%_OBJS)
@echo $@ $^
得到你想要的结果!
$ make libabc.so libdef.so
touch a.o
touch b.o
touch c.o
libabc.so a.o b.o c.o
touch d.o
touch e.o
touch f.o
libdef.so d.o e.o f.o
rm a.o b.o c.o e.o d.o f.o
请注意,如果没有规则来创建依赖项(%.o:
规则),则模式规则不匹配。