c++ - Visual Studio中相互依赖的项目的并行编译

标签 c++ visual-c++ visual-studio-2013 build msbuild

在我的公司,我们使用 Visual Studio 2013,我们希望减少 C++ 解决方案的构建时间。它大约有 55 个项目,调试构建大约需要 20 分钟,而发布构建则需要更多时间。我想知道是否有一种方法可以使相互依赖的项目并行编译。我已经知道并利用了多进程编译(/MP 标志)。事实上,解决方案中的每个项目都是使用多核构建的。 Aslo 当两个项目,比方说 A 和 B,他们并行构建时不依赖于彼此。然而,根据我们当前的设置,如果 A 依赖于 B,则 B 的构建必须在 A 开始之前完成。据我所知,A 中的文件编译甚至可以在 B 完成之前开始,并且只有 A 的链接必须真正等到 B 完成(假设 A 生成 .dll 或 .exe)。有没有办法做到这一点?如果 VS2013 不行,我们很快计划升级到 VS2017,所以关于 VS2017 的建议也很有用。

最佳答案

C++ 编译器开关/MP 用于并行编译 cpp 文件。这是基于每个项目的。但是,这不会让所有项目并行构建。为此,您必须将 -M[:num] 或 -maxcpucount(最大 cpu 计数)传递给 msbuild.exe。 (详见 https://msdn.microsoft.com/en-us/library/ms164311.aspx)

回答您的第一个问题:“是否有办法使相互依赖的项目并行编译”。 答案有点。 如果两个相互依赖的项目在一个解决方案中,并且彼此之间的依赖关系被明确标记,那么cpp文件可以同时编译,但不能同时链接。链接必须按照它们相互依赖的顺序发生。

所以一般来说,如果你想让编译速度更快,你希望项目之间的依赖尽可能少。但是还有其他方法可以使 C++ 编译速度更快。

至于 VS 2017,Run don't Walk 升级。

关于c++ - Visual Studio中相互依赖的项目的并行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47759099/

相关文章:

c++ - 遍历 multiset 元素的所有组合

c++ - 为什么在赋值后调用析构函数?

c++ - pthread.h 头文件问题

C++ Sfml 文本输出

visual-studio-2013 - 在 TFS 构建期间未找到程序集

asp.net - 什么是 Visual Studio 2013 项目使其成为武士刀项目?

c++ - 使用 C++ 或 Python 进行图像比较

C++ 点作为空格?

c++ - VC++ 中库的链接错误

c - 如何将两个windows vc静态库合并为一个