交换库中的对象文件

swap object files inside a library

本文关键字:对象 文件 交换      更新时间:2023-10-16

在我们使用cmake管理的项目中,我们使用静态库lib.a链接时。

因此,最终的可执行文件(静态链接(将由我们刚刚编译的的对象文件组成

a.o

b.o

c.o

和静态库lib.a

然而,其中一些文件(比如c.o(可能(并不总是(已经在lib.a中。在这种情况下,我们希望使用我们刚刚编译的最新的c.o,而不是已经在lib-a中的

这可能吗?我们如何使用Cmake做到这一点?

我的想法就像是取消对lib.a的归档,找出是否有任何对象文件已经在里面,然后再次归档(在这种情况下使用c.o(,然后使用正常链接可执行文件

a.o

b.o

以及新制造的

lib.a

在Linux上:$ ar -ru lib.a c.o应该这样做。这将更新lib.a中的c.o,前提是c.olib.a中已经包含的副本更新。

来自$ man ar:

通常,ar r…会将列出的所有文件插入存档。如果你只想插入您列出的那些较新的文件与同名的现有成员相比,请使用此修饰符。u修饰符只允许用于操作r(替换(。特别地,组合qu是不允许的,因为检查时间戳会失去操作q的任何速度优势。