使用 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/