交换库中的对象文件

时间:2015-05-27 09:04:54

标签: c++ c linker cmake

在我们使用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

1 个答案:

答案 0 :(得分:1)

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

来自$ man ar

  

通常,ar r ...插入归档中列出的所有文件。如果你   我想只插入你更新的文件   与现有的同名成员相比,使用此修饰符。你   修饰符仅允许用于操作r(替换)。特别是,   组合qu是不允许的,因为检查时间戳会   从操作q中失去任何速度优势。