Visual Studio中具有相互依赖关系的项目的并行编译

时间:2017-12-11 18:28:00

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

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

1 个答案:

答案 0 :(得分:1)

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

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

因此,如果您希望更快地编译,那么通常您希望项目之间的依赖关系尽可能少。但还有其他方法可以使C ++编译更快。

对于VS 2017,Run不要步行升级。

相关问题