我有一个包含大量自动生成代码的项目,我们在链接到最终可执行文件之前将其构建到静态库中。我们使用 gcc/gnat 5.04a 的文件太多了,我们不得不将作业拆分成批处理并多次调用 ar 来构建库(为了避免命令行长度限制),例如:
[echo] Archiving codegen
[echo] Deleting old codegen archive
[ar] Using ar found in /usr/bin
[ar] Batch 1 of 7 completed in 37.871 s
[ar] Batch 2 of 7 completed in 55.796 s
[ar] Batch 3 of 7 completed in 89.709 s
[ar] Batch 4 of 7 completed in 256.894 s
[ar] Batch 5 of 7 completed in 196.704 s
[ar] Batch 6 of 7 completed in 248.334 s
[ar] Batch 7 of 7 completed in 243.759 s
[ar] Archiving took: 1129.067 s
[ar] Using ranlib found in /usr/bin
[ar] Indexing took: 247.223 s
[echo] Done with codegen
我们正在寻找潜在的速度改进。看起来,随着存档的增长,每批需要的时间越来越长,大概是因为在添加对象之前需要搜索更多(更新)。这似乎就是为什么删除存档比仅更新旧存档更快的原因。为了追求更快的速度,我们在 ar 命令中使用了标志“qcS”。根据手册页,“q”(应该是快速附加)实际上是“r”(即“使用替换”)的同义词,“c”创建存档(没有什么特别之处)并且“S”跳过生成一个索引(我们在最后再次使用“ranlib”来覆盖它。
有没有什么方便的方法,使用内置工具,让这个操作更快?如果“快速附加”模式有效,那可能就是我们想要的,但是唉。