Makefile 问题求教
本帖最后由 hdw10 于 2013-08-30 12:08:00 编辑
当前目录下有四个静态库文件。 liba.a libb.a libc.a libd.a,
我将它们做成一个动态库libp.so。 (所有的.o 都是经过 -fPIC 编译过的。 直接可用)
我的Makefile 是这么写的:
LIBP=libp.so
LPATH=.
LIBS_OBJS=$(foreach dir, $(LPATH), $(wildcard $(dir)/*.a))
$(LIBP) : $(LIBS_OBJS)
$(AR) -x liba.a
$(AR) -x libb.a
$(AR) -x libc.a
$(AR) -x libd.a
$(CC) -shared -o $@ *.o
我的问题是, 怎样实现一个方法, 能将$(LIBS_OBJS)里的文件逐个取出来, 分别执行$(AR) -x。
简单说, 就是
$(LIBP) : $(LIBS_OBJS)
$(AR) -x liba.a
...
这些抽象成函数。
请有经验的朋友研究研究。
------解决方案--------------------试试这个看有没有效果
LIBS_OBJS = liba.a libb.a libc.a libd.a
$(LIBP) : $(LIBS_OBJS)
$(AR) -x $@
------解决方案-------------------- LIBP=libp.so
LPATH=.
LIBS_OBJS:=liba.a libb.a libc.a libd.a
define test
$(1)_deal:
@echo "deal $(1)"
endef
default: $(LIBP)
$(foreach v, $(LIBS_OBJS), $(eval $(call test, $(v))))
LIB_DEP=$(addsuffix _deal, $(LIBS_OBJS))
$(LIBP):$(LIB_DEP)
@echo "get $@"