c++ - 仅当 CMake 中的 header 更改时才重新链接共享库

标签 c++ cmake shared-libraries

使用 CMake,是否有一种方法可以生成构建系统,如果共享库的源代码发生变化而其 header 未发生变化,则不会重新链接下游的所有内容?

在 Makefile 中,我在共享库本身上使用了带有仅顺序先决条件的规则,并在库 header 上使用了常规先决条件来获得这种效果。

我知道这不能严格保证生成正确的构建,例如您可以从共享库中删除函数定义,但这是为了快速重建调试版本,根据我的经验,它几乎总能生成正确的版本。我认为我遇到过一两次运行时链接器错误,但在那个奇怪的情况下,像往常一样运行构建并没有太大问题。

不过,如果有充分的理由表明这实际上是一个糟糕的想法并且不应该这样做,那也可能是一个答案。

最佳答案

在 CMake 2.8.11 及更高版本中,您可以设置 CMAKE_LINK_DEPENDS_NO_SHARED 以获得此行为。

http://thread.gmane.org/gmane.comp.programming.tools.cmake.user/43246/focus=44469

http://www.cmake.org/cmake/help/v3.1/prop_tgt/LINK_DEPENDS_NO_SHARED.html

关于c++ - 仅当 CMake 中的 header 更改时才重新链接共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867134/

相关文章:

linux - 如何检查程序中共享库暴露的函数

c++ - 在 Linux 上链接到我自己的共享库中的某些函数时出现问题

c++ - 通过 Firefox p11 模块打开 Wxwidget 窗口时崩溃

c++ - 是否可以根据构造函数中作为参数传入的 bool 将数据成员初始化为 const?

c++ - 如何调试 win 32 进程以查找内存访问冲突?

cmake - 如何将cmake指向库的特定目录?

cmake - CMake是如何使用的?

c++ - 包含头文件时,路径是否区分大小写?

c++ - NaCl 和共享内存

c - 来自另一个目标的 add_custom_command