使用 MSBuild 将 /MP 选项传递给编译器

Pass /MP option to the compiler using MSBuild

我有一个 VC 项目文件,我正在使用 MSBuild 从命令行构建它。我想指定 /MP 标志 而无需 编辑项目文件。那可能吗? 我在调用 MSBuild 之前尝试了 set CL=/MP,但没有任何效果。

您需要一个可以从命令行覆盖的 属性。在文本编辑器中打开 .vcxproj 文件,记事本即可。找到 "Globals" 属性 组并添加一个名为 属性 的 "Turbo"

  <PropertyGroup Label="Globals">
    <Turbo>false</Turbo>
    ...etc...
  </PropertyGroup>

并使用属性指定编译选项。由于它只能在发布版本中工作:

  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <MultiProcessorCompilation>$(Turbo)</MultiProcessorCompilation>
        ...etc...
    </ClCompile>

和运行 MSBuild:

  msbuild /p:Configuration=Release /p:Turbo=true

这可以通过访问 CL_MPCount Visual Studio 选项来完成:

MSBuild /m:2 /p:CL_MPCount=2 /p:Configuration=Release tf_tutorials_example_trainer.vcxproj

上面指示编译器最多执行2个并行编译任务。 /m:2 标志允许 MSBuild 并行构建两个项目。最终结果是我们最多有 4 个 cl.exe 并行进程 运行。

更新: CL_MPCount=2 标志作为 /MP2 传递给 cl.exe。这允许在同一项目中并行编译 2 .cpp 个文件。