加速自定义构建步骤、事件和工具

您还可以分发自定义构建步骤、事件和工具,以便在远端机器上执行代码生成、渲染、模拟、计算等任务(计算属于代码构建的一部分)。

您也可以指示 Incredibuild 与其他任务并行执行以上任务,否则这些任务将等待自定义步骤、事件和工具执行结束后再执行。例如,项目 A 是一个静态库项目,包含一后链步骤,该步骤用于删除某些文件并将文本写入日志文件。由于项目 B 与项目 A 的输出相关联,因而项目 A 被定义为项目 B 的依赖项(子项目)。Visual Studio(以及 Incredibuild)默认行为即,在开始编译项目之前等待该项目的子项目中所有项目级步骤完成。因此,在项目 A 的后链步骤完成前,项目 B 不会开始编译,这会导致构建速度减慢。在这种情况下,您可以更改默认行为,并指示 Incredibuild 尽快开始编译依赖项目。该指令还可用于加速单个项目的执行,因为 Visual Studio 会在项目中按顺序运行与自定义构建步骤、事件、工具和规则相关的任务,并且在许多情况下这并不相关。

此外,您还可以在进程级别上允许分发和并行化构建步骤的内容,以进一步加速构建。

加速 Visual Studio 中的构建步骤

自定义构建步骤、事件或工具可以进一步分解为更小的任务,并加以并行化,从而实现更大程度的加速。这使得在进程级别上进行分发和并行化成为可能。该功能仅在以下情况中可用:

  1. Incredibuild 预测功能(默认开启)未关闭。

  2. Incredibuild UseMSBuild 指令未使用。

  3. 相关构建执行时,未设置为“忽略错误进行构建”。

示例 1:如果在自定义步骤中,用户执行了一个用于构建完整项目的完整 Make 命令,则您可以使用 Incredibuild Make 和 Build Tools 包,指示 Incredibuild 高速执行 Make 命令。在此示例中,Incredibuild 未将 Make 命令视为单个任务,而是将此命令“分解”为多个子任务,并以并行和分布式的方式执行编译。

示例 2:如果您现有一个自定义步骤,且该步骤配有一工具可运行多种渲染命令,那么您可以使用 Profile XML 文件,用以分发渲染并拦截生成渲染进程的工具。

说明:您可以将配置文件 XML 文件集成到 Visual Studio 中。

分发任务

默认情况下,自定义步骤、任务执行和特殊构建工具均不会分发至远程 Agent。为使 Incredibuild 能够分发和管理这些任务,请使用 Profile XML 文件。

  • 请使用 Incredibuild BuildConsole 命令中的 /profile 指令,指定 Incredibuild 所需使用的配置文件:/profile=[profile_file_name].xml

    -或-

  • 如果您是在 Visual Studio 中进行构建,或者您希望解决方案使用默认配置文件(每个解决方案自有),请创建 [solution_folder]\[solution_name].ib_profile.xml Profile XML 文件。如果未使用 /profile=[profile_file_name].xml 转换功能指定配置文件,Incredibuild 将会自动加载以上 Profile XML 文件。

    以下 XML 文件指示了 Incredibuild 分发由构建执行的每个 gawk 任务(无需为 gawk.exe 指定文件扩展名):

    复制
    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
     <Profile FormatVersion="1">
      <Tools>
       <Tool Filename="gawk" AllowRemote="true" />
      </Tools>
     </Profile>

如果在添加了 profile.xml 文件之后,您的自定义构建步骤和构建事件仍显示为单个任务(构建监视器中标记为“IBCustomStep”的单栏),请在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Xoreax\Incredibuild\Builder 注册键中将 CustomStepVs10Support 的注册值从默认“1”改为“0”。

批处理任务

您可以使用 MSBuild 引擎,该引擎可在单个 CPU 核心上以顺序方式执行单个项目环境中的所有自定义构建工具和规则。例如,针对每个需要生成的文件,运行 moc.exe 的自定义构建工具 (如在 GUI SDK QT 中)均可在项目 A 中按顺序执行。

举例来说,如果使用 Incredibuild Profile XML 文件中的 AllowPredictedBatch 选项指定 moc.exe 这一工具的名称,用来指示 Incredibuild 并行执行此工具,性能可显著提升。由于该工具现以并行方式运行,您还可以进行配置,将其分发到远端机器。并行化的应用将持续到另一可执行文件被调用(例如 CL 或 LINK)。

使用此功能进行安全加速的工具须具有以下特征:

  1. 可执行文件的任意两个实例不会尝试写入同一文件(例如输出文件、日志文件)。

  2. 可执行文件的任意实例均不依赖于其他实例所做的任何操作。例如,某一实例并不会依赖于另一实例的输出文件,且任意实例均不会删除其他实例所使用的任何文件或文件夹)。

>要在 Visual Studio 中批处理任务,需进行以下操作:

  • AllowPredictedBatch="true" 工具标签添加至解决方案的 .ib_profile.xml 文件中。

使用示例

如果您解决方案的名称文件是 my_solution.sln,且您希望并行化和分发 moc.exe 执行,则需进行以下操作:

  • my_solution.ib_profile.xml 文件添加至 my_solution.sln 文件所在的文件夹。该操作会将配置文件应用于 Visual Studio 中运行的、属于此解决方案的所有构建。

  • 此外,如需从命令行进行构建,请使用 /profile 转换功能来指定配置文件:Buildconsole my_solution.sln /rebuild /cfg=”debug|win32” /profile=”my_solution.ib_profile.xml”

My_solution.ib_profile.xml 中的示例内容:

复制
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
  <Tools>
    <Tool Filename="moc" AllowRemote="true" AllowPredictedBatch="true"/>
  </Tools>
</Profile>