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 $@"