【问题标题】:msbuild - how to do task batching (same project) in parallelmsbuild - 如何并行执行任务批处理(同一项目)
【发布时间】:2018-04-19 04:08:35
【问题描述】:

假设我有这个定义

<MSBuild
    Projects="$(MSBuildProjectFile)"
    Condition="'@(FilesToCompile)' != ''"
    Targets="buildcpp"
    Properties="CPPFILE=%(FilesToCompile.FullPath);OBJFILE=$(ObjectFolder)\%(FilesToCompile.Filename).doj;IncludeDirs=$(IncludeDirs)"
/>

由于task batching,此目标被执行多次,FilesToCompile 中的每个文件执行一次。重要的是,每次调用都是完全独立的,因此非常适合并行化。

问题

如何为task batching 启用“并行模式”?

不是重复的

我想用不同的属性值多次调用相同的目标,为此,我需要并行完成batching

链接的问题不做批处理,它使用不同的项目。

【问题讨论】:

  • 我看不出这与链接的副本有何不同:您是否尝试过答案的示例代码?它以不同的属性多次构建同一个项目,并行。正是你要问的?
  • @stijn 示例代码不会遍历 ItemGroup FilesToCompile.FullPath。使用链接的解决方案,我必须手动“展开”整个项目组。
  • 这是一个完全不同的问题:它是关于如何多次创建一个包含项目的 ItemGroup,每个项目的 Properties 元数据都有不同的值。您不必手动执行此操作,只需使用批处理声明一个项目。因此,您不需要需要并行批处理,在这种情况下,这会试图将一个圆推过一个方孔:只需使用规范的 MSBuild 方式,使用众所周知的内置功能。
  • @stijn 好的。我该怎么做?

标签: windows visual-studio visual-studio-2013 msbuild parallel-builds


【解决方案1】:

MSBuild 支持项目级别的并行性,此外还支持 CL 编译器级别的 C/C++ 项目。要让 MSBuild 在您的情况下开始使用并行性,有必要提供多个项目并将它们作为 (i) 单个项目的依赖项或 (ii) 具有已定义构建图的解决方案传递给 MSBuild。此外,需要在命令行中将/m/maxcpucount 传递给MSBuild,建议使用/nodereuse:false/nr:false

原则上,您必须为一次目标调用创建/生成多个项目。

【讨论】:

【解决方案2】:

如何为此任务启用“并行模式”?

要并行运行构建,我们可以在命令提示符处使用/maxcpucount 开关或在MSBuild 任务上使用BuildInParallel 任务参数。因此,您应该为您的任务使用BuildInParallel 任务参数。

BuildInParallel任务参数的默认值为false,我们需要将其设置为true

<PropertyGroup>  
    <BuildInParallel Condition="'$(BuildInParallel)' == ''">true</BuildInParallel>  
</PropertyGroup>

<MSBuild
    Projects="$(MSBuildProjectFile)"
    Condition="'@(FilesToCompile)' != ''"
    Targets="buildcpp"
    BuildInParallel="$(BuildInParallel)" 
    Properties="CPPFILE=%(FilesToCompile.FullPath);OBJFILE=$(ObjectFolder)\%(FilesToCompile.Filename).doj;IncludeDirs=$(IncludeDirs)"
/>

有关更多详细信息,请参阅 Building Multiple Projects in Parallel with MSBuildnew parallel task in the MSBuild Extension Pack

【讨论】:

  • 这不能回答问题。 OP 希望使用不同的属性多次构建同一个项目,并并行执行。
  • 我同意@stijn。我更新了问题以解释为什么它与 潜在重复 不同
猜你喜欢
  • 2013-03-01
  • 2020-02-02
  • 2021-08-02
  • 2014-07-02
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
相关资源
最近更新 更多