在我们使用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
答案 0 :(得分:1)
在Linux上:$ ar -ru lib.a c.o
应该这样做。这将更新c.o
中的lib.a
,前提是c.o
比lib.a
中已包含的副本更新。
来自$ man ar
:
通常,ar r ...插入归档中列出的所有文件。如果你 我想只插入你更新的文件 与现有的同名成员相比,使用此修饰符。你 修饰符仅允许用于操作r(替换)。特别是, 组合qu是不允许的,因为检查时间戳会 从操作q中失去任何速度优势。