进行团结建设时的嵌入行为(叮当声)

  • 本文关键字:叮当声 c++ cmake build clang
  • 更新时间 :
  • 英文 :


为了优化编译时间,我想为我的嵌入式系统(C++(项目启用统一构建(通过CMake(。效果很好,但在我看来有一些副作用。

我观察到的一件主要事情是,链接的二进制具有与"0"相比不同的大小(更大(;正常的";建筑在查看elf文件时,我注意到与其他二进制文件相比,unity构建的二进制文件中的符号更少。在我看来,有些内联发生在编译时(最初我认为内联发生在链接时?(,因此当内联函数被多次使用时,二进制大小会增加。

由于unity构建中会出现内联,因此运行时也会稍微短一些。

我现在担心的是,随着源代码的增长,我会得到不同的统一桶,因此内联并不是真正具有确定性的。

如果我的假设是正确的,有没有办法解决这个问题?

首先介绍

(最初我认为内联发生在链接时?(

依赖于编译器和上下文,但通常情况下,这里同时涉及编译器和链接器。

对于一般问题:

你如何为自己定义Unity桶?我猜你的意思实际上是多个翻译单位。如果是这样的话,没有什么真正不同于";普通的";构建方案(每个.cpp导致一个单独的翻译单元(,因此您关心的问题与UnityBuild的细节无关。作为最佳实践:如果您使用UnityBuilds,请确保您的项目/解决方案始终适用于";普通的";构建,UnityBuild也是如此。这意味着:例如:避免全局始终使用命名空间(在.cpp和.h中(,确保您不会遇到静态初始化顺序的惨败(与您的问题非常相关(,避免大量匿名命名空间使用情况(我知道…(,使用严格的include guard方案等等…

最新更新