c++ - 安全的 Unity 构建

标签 c++ build dependencies

我从事一个使用 Unity 构建的大型 C++ 项目。对于那些不熟悉这种做法的人,Unity 将#include 多个相关的 C++ 实现文件构建到一个大型翻译单元中,然后将其编译为一个单元。这节省了重新编译 header ,减少链接时间,通过将更多功能引入内部链接等来提高可执行文件的大小/性能。通常是好东西。

但是,我刚刚在我们的一个构建中发现了一个潜在的错误。一个实现文件使用了没有包含相关头文件的库,但它编译并运行了。在绞尽脑汁之后,我意识到它被包含在我们的统一构建中之前包含的一个实现文件中。这里没有造成任何伤害,但如果有人试图在以后独立地重用该文件,那可能会是一个令人困惑的惊喜。

除了定期构建非 Unity 版本之外,是否有任何方法可以捕获这些静默依赖项并仍然保持 Unity 构建的优势?

最佳答案

我之前对源存储库中的卡住项目使用过 UB 方法,我们从未打算再次维护这些项目。不幸的是,我很确定你的问题的答案是否定的。如果您想测试这些类型的错误,您必须定期单独构建所有 cpp 文件。

可能最接近自动解决方案的是一个 buildbot,它自动收集项目中的所有 cpp 文件(UB 文件除外)并定期从源存储库构建常规方式,指出任何同时构建错误。这样,您的本地开发仍然很快(使用 UB),但您仍然可以从这些周期性的 buildbot 构建中捕获您错过的任何错误,这些构建机器人分别构建所有 cpps。

关于c++ - 安全的 Unity 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136539/

相关文章:

c++ - 二进制文件大小大于预期的 C++

c++ - linux中动态链接库的开源c++代码覆盖率

c++ - C++ 中的信号量

c++ - 未知 HZ 值

java - Gradle构建失败,:app:mergeDebugResources失败

Java Gradle 构建 : NoClassDefFoundError

android - 尝试添加广告时,Gradle 构建无法编译

delphi - 在 Delphi XE 中构建事件宏

Docker Hub Registry 无法从 Github 存储库构建 docker 镜像

java - 编译 JAR 文件及其所有 JAR 依赖项