我最近有理由使用通常的 Debug 和 Release 配置以及“Release All”和“Debug All”的一些 Visual Studio C++ 项目,这是我以前从未见过的。
事实证明,项目的作者有一个 ALL.cpp,其中 #includes 所有其他 .cpp 文件。 *All 配置只是构建这个 ALL.cpp 文件。它当然排除在常规配置之外,常规配置不会构建 ALL.cpp
我只是想知道这是否是一种常见的做法?它带来什么好处? (我的第一 react 是闻起来很臭。)
您可能会遇到什么样的陷阱?我能想到的一个问题是,如果您的 .cpp 中有匿名命名空间,它们不再是该 cpp 的“私有(private)”,但现在在其他 cpp 中也可见?
所有项目都构建 DLL,因此在匿名命名空间中存储数据不是一个好主意,对吧?但是功能就可以了?
最佳答案
它被一些人(和谷歌)称为“Unity Build”。它的链接速度非常快,编译速度也相当快。它非常适合您不需要迭代的构建,例如来自中央服务器的发布构建,但它不一定适用于增量构建。
这是一个需要维护的 PITA。
编辑:这是获取更多信息的第一个谷歌链接:http://buffered.io/posts/the-magic-of-unity-builds/
让它快速的原因是编译器只需要读取所有内容一次,编译出来,然后链接,而不是对每个 .cpp 文件都这样做。
Bruce Dawson 在他的博客上对此进行了更好的描述:http://randomascii.wordpress.com/2014/03/22/make-vc-compiles-fast-through-parallel-compilation/
关于c++ - #将所有 .cpp 文件包含在一个编译单元中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/543697/