GNU 归档器的一个小用处是归档脚本,它是一个简单但功能强大的界面,它可以做你想做的事,例如,如果下面的脚本被称为 script.ar:
CREATE libNewColor.a
ADDLIB libColor.a
ADDLIB libRGB.a
ADDLIB libPixel.a
SAVE
END
然后你可以调用 ar 如下:
ar -M < script.ar
你会得到 libNewColor.a,其中包含来自 libColor.a、libRGB.a 和 libPixel.a 的所有 .o 文件。
此外,您还可以使用 ADDMOD 命令添加常规 .o 文件:
CREATE libNewColor.a
ADDLIB libColor.a
ADDLIB libRGB.a
ADDLIB libPixel.a
ADDMOD someRandomCompiledFile.o
SAVE
END
此外,在 Makefiles 中生成这些脚本非常容易,因此我通常创建一个通用的 makefile 规则来创建实际生成脚本并在脚本上调用 ar 的档案。像这样的东西:
$(OUTARC): $(OBJECTS)
$(SILENT)echo "CREATE $@" > $(ODIR)/$(ARSCRIPT)
$(SILENT)for a in $(ARCHIVES); do (echo "ADDLIB $$a" >> $(ODIR)/$(ARSCRIPT)); done
$(SILENT)echo "ADDMOD $(OBJECTS)" >> $(ODIR)/$(ARSCRIPT)
$(SILENT)echo "SAVE" >> $(ODIR)/$(ARSCRIPT)
$(SILENT)echo "END" >> $(ODIR)/$(ARSCRIPT)
$(SILENT)$(AR) -M < $(ODIR)/$(ARSCRIPT)
虽然现在我看它,但我想如果 $(OBJECTS) 为空(即,如果您只想合并档案而不添加额外的目标文件)它不起作用,但我将把它作为练习留给读者修复它如果需要,问题...:D
以下是此功能的文档:
https://sourceware.org/binutils/docs/binutils/ar-scripts.html#ar-scripts