日期:2014-05-16  浏览次数:20740 次

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  
...

这些抽象成函数。 

请有经验的朋友研究研究。 

 
makefile linux

------解决方案--------------------
试试这个看有没有效果

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