1

假设我有这个定义

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

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

问题

如何为任务批处理启用“并行模式” ?

不是重复的

我想用不同的属性值多次调用同一个目标,为此,我需要并行完成批处理

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

4

2 回答 2

0

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

要并行运行构建,我们可以/maxcpucount在命令提示符下使用 switch 或在 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)"
/>

有关更多详细信息,请参阅使用 MSBuild 并行构建多个项目MSBuild 扩展包中的新并行任务。

于 2017-11-07T07:39:18.207 回答
0

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

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

于 2017-11-06T22:51:26.383 回答