CMake 中 headers 更改时仅重新链接共享库

Only relink shared libraries when headers change in CMake

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

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

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

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

在 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