Makefile 问题求教

韩大卫 2013-08-30 12:01:16
当前目录下有四个静态库文件。 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
...

这些抽象成函数。

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


...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
韩大卫 2013-08-30
  • 打赏
  • 举报
回复
引用 2 楼 lisa5001 的回复:
 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 $@"
谢谢了。 学习了。
  • 打赏
  • 举报
回复
2L foreach的方式靠谱。。。
糊涂的小白 2013-08-30
  • 打赏
  • 举报
回复
 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 $@"
  • 打赏
  • 举报
回复
试试这个看有没有效果

LIBS_OBJS = liba.a libb.a libc.a libd.a

$(LIBP) : $(LIBS_OBJS)
    $(AR) -x $@  

19,610

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧