【问题标题】:How can I do a parallel build in Visual Studio 2010?如何在 Visual Studio 2010 中进行并行构建?
【发布时间】:2011-05-30 04:11:22
【问题描述】:

如何让 VS 2010 一次运行多个 C++ 编译进程?我的意思是并行构建对象模块;我对一次构建多个项目不感兴趣(我知道工具 > 选项 > 构建和运行

基本上,我正在寻找 Visual Studio 的“make -jN”等价物。

【问题讨论】:

标签: visual-studio visual-studio-2010 visual-c++ parallel-builds


【解决方案1】:
  1. 工具 -> 选项
  2. 项目和解决方案\VC++ 项目设置
  3. 最大并发 C++ 编译次数

另外,正如Ross Smith在cmets中所说,你还需要在项目上开启“多处理器编译”选项:

  1. 项目属性
  2. 配置属性 > C/C++ > 常规
  3. 多处理器编译
  4. 利润!

【讨论】:

  • 这没有任何作用。将其设置为 0(默认值,应该意味着“使用所有内核”)或 4(实际内核数)没有任何区别,它仍然一次只构建一个模块。
  • @Ross:当这种并行构建生效时,它不会显示在控制台输出中(与项目并行构建不同)。您是否根据查看任务管理器验证它没有发生,或者您只是在控制台上没有看到任何内容?您应该会看到与核心数量相同的cl.exes。
  • 重要的是要注意/MP(又名多线程编译)标志与某些其他构建标志不兼容,例如增量编译。 @billy:它应该为每个翻译单元显示来自每个编译线程(thread> message)的消息,除非他们从 vs08 开始删除了该功能......
  • 原来我在项目属性中错过了一个选项,配置属性 > C/C++ > 常规 > 多处理器编译。开启这种工作 - 它并行构建一些模块,但仍然坚持为其他模块返回单个线程,我还没有弄清楚可能导致差异的原因。不得不为每个项目手动设置它也是一种痛苦,但我想半个解决方案总比没有好。
  • 您可以Shift+选择多个项目并同时编辑它们。
【解决方案2】:

为了使 VS 使用多线程构建,必须设置两个开关(都是特定于项目的):

  • 项目属性->C/C++->常规->多处理器编译设置为:Yes (/MP)
  • project properties->C/C++->Code Generation->Enable Minimal Rebuild设置为:No (/Gm-)

还要检查您的工具->选项->项目和解决方案->VC++ 项目设置->最大并发 C++ 编译数设置。默认值为 0,这使得 VS 可以使用尽可能多的并发编译。

【讨论】:

  • 什么时候需要禁用最小重建才能使用多处理器编译?
  • 总是因为它们不兼容。
【解决方案3】:

Necrolis 的评论似乎是正确的解决方案。

/MP (Build with Multiple Processes)

/MP 选项使编译器创建一个或多个副本 本身,每个都在一个单独的过程中。这些副本同时 编译源文件。因此,构建的总时间 源文件可以大大减少。

请注意,您可以在项目级别设置它(因此它将应用于其中的所有文件)以及单个文件,例如,如果您需要使用 #import

特别是,/MP 通常与预编译头文件或使用#import 的源不兼容;在这种情况下,您仍然可以在项目上设置 /MP 标志,然后在单个文件(通常是 stdafx.cpp 以及使用#import 的任何文件)上清除它。

【讨论】:

    【解决方案4】:

    jom 是您正在寻找的工具。

    来自维基:http://qt-project.org/wiki/jom

    jom是nmake的一个克隆,支持多个执行 并行的独立命令。它基本上添加了 -j 命令 类似于 GNU make 的线路开关。

    虽然大部分文档针对的是 Qt 开发人员,他们试图在 Windows 上加快 Qt 库的构建速度,但只要您有与 nmake 兼容的 makefile,jom 也应该在非 Qt 项目中运行良好。

    wiki 页面有您可以下载的二进制文件,您可以像调用 nmake 一样调用 jom。

    【讨论】:

    • 不幸的是,我发现 jom 有很多错误,并且通常直到世界末日才知道进程已经终止挂起。
    【解决方案5】:

    这就是我所做的

    1)转到工具->选项,而不是“项目和解决方案”->“构建和运行”对我来说它有核心数量。虽然一开始我以为这就是我需要做的,但事实并非如此

    2) 右键单击​​您的项目并选择属性。在“配置属性”->“C/C++”->“命令行”下输入/MP4,其中 4 是您拥有的内核数。您将收到有关标志不兼容的警告,因此我们还有另一个步骤

    3) 转到“配置属性”->“C/C++”->“代码生成”下有“启用最小重建”。将其更改为否。

    重建,您应该会在任务管理器中看到多个 CL 进程。

    【讨论】:

      【解决方案6】:

      我明白了!您的要求是在并行线程中构建单个项目。

      我发现Shark compiler Control 插件非常有用

      【讨论】:

        猜你喜欢
        • 2014-06-24
        • 2011-02-20
        • 2011-10-14
        • 2023-03-22
        • 2012-02-18
        • 2011-02-19
        • 2012-01-14
        • 1970-01-01
        • 2011-02-10
        相关资源
        最近更新 更多