如果在你的项目中有两个工程,分别编译成liba.a和libb.a,这时如果要开放一个新的api库给客户端使用libc.a
但是在libc.a中依赖了liba.a和libb.a,那么发布的时候不可能发布三个库,只能发布一个库libc.a,那么就需要
将liba.a和libb.a打入到libc.a中,可通过如下命令方式来做:
rm libc.a
rm ar.mac
echo CREATE libc.a > ar.mac
echo SAVE >> ar.mac
echo END >> ar.mac
ar -M < ar.mac
ar -q libc.a *.o
echo OPEN libc.a > ar.mac
echo ADDLIB liba.a >> ar.mac
echo ADDLIB libb.a >> ar.mac
echo SAVE >> ar.mac
echo END >> ar.mac
ar -M < ar.mac
rm ar.mac
也可以通过编译脚本来定义:
define BUILD_LIBRARY
$(if $(wildcard $@),@$(RM) $@)
$(if $(wildcard ar.mac),@$(RM) ar.mac)
$(if $(filter %.a, $^),
@echo CREATE $@ > ar.mac
@echo SAVE >> ar.mac
@echo END >> ar.mac
@$(AR) -M < ar.mac )
$(if $(filter %.o,$^),@$(AR) -q $@ $(filter %.o, $^))
$(if $(filter %.a, $^),
@echo OPEN $@ > ar.mac
$(foreach LIB, $(filter %.a, $^), @echo ADDLIB $(LIB) >> ar.mac )
@echo SAVE >> ar.mac
@echo END >> ar.mac
@$(AR) -M < ar.mac
@$(RM) ar.mac )
endef
libc.a:$(OBJS)
$(BUILD_LIBRARY)