项目引入了多个三方静态库,其中包含的.o文件重名,但是幸运的是函数不重名,类不重名,因此只需要在ar时重命名.o文件即可。
makefile中:
for lib in $(THIRD_PARTY_STATIC_LIBS);\
do\
tmp=$${lib##*/};\
$(AR) -x $$lib;\
find ./ -name "*.o" | awk -F "." '{print $$2}' | xargs -i -t mv ./{}.o ./{}$$tmp.o;\
$(AR) -rcu $@ *.o;\
ranlib $@;\
$(RM) -f *.o;\
done
tmp赋值为取出文件名(第一步去除目录和第二步去除后缀)
makefile中for开始执行的是shell,所以取变量需要多加一个$转义,因为是shell,所以也无法使用notdir,basename等makefile中使用的函数,会提示找不到。
然后再将所有.o文件都批量重命名就好了(加了第三方库名称区分)
ps:静态库就是一堆.o文件的集合,每个.o会包含一些函数地址,ar -x就是将静态库.a文件解压成一堆.o文件,然后用ar -rcu将这一堆.o文件压到最终想生成的静态库.a文件,实现把多个.a文件合并成一个.a文件。
最后记得用ranlib xxx.a更新这个.a。