cmake 私有标头和公共标头之间的分离是否可以缩短链接时间?

qvtsj1bj  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(123)

我们有一个非常大的代码库(超过3K的翻译单元),尽管它被细分为小库,但私有头文件和公共头文件之间没有区别。
我们使用CMake作为构建系统,并且我们是在Linux上构建的,所以我的理解是,默认情况下,每个符号都是导出的,当链接器必须选择要链接的符号时,它必须在所有符号中进行选择,甚至是那些不是库公共接口的一部分的符号。
如果我们将每个库的头文件区分为private和public,并且在表示库之间的依赖关系时大量使用CMake PUBLIC和CMake PRIVATE依赖类型,那么在链接时间方面会有什么好处吗?还是仍然是链接器只能看到所有内容,必须执行完整搜索的情况?

nkkqxpd9

nkkqxpd91#

......在连接时间方面会有什么好处吗?
不,这是另一回事。你可以做很多事情来减少构建时间。首先,我想到了:

  • 明智使用PCH
  • 尝试unitybuilds(准备好修正你的代码)
  • 减少包含的头文件数量(IWYU,可能有帮助,但可能不容易)
  • 准确查看PUBLIC/PRIVATE依赖项,以确保仅将必要的库列为依赖项
  • 通过可见性控制减少导出符号的数量(也可能是ld-scripts)
  • 尝试ccache

......这是首先要做的事情。

相关问题