如果在你的項目中有兩個工程,分別編譯成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)