如何在进行自动构建时处理不同的每个项目构建配置?

时间:2011-12-06 11:35:04

标签: delphi build-automation delphi-2009

在深入探讨build configuration inheritance之后,出现了下一个问题:如何处理仅对某些包存在的构建配置?

命令行的构建过去看起来像这样:

msbuild ..\lib\Package1.dproj /target:Build /p:config=%1
msbuild ..\lib\Package2.dproj /target:Build /p:config=%1
msbuild ..\lib\Package3.dproj /target:Build /p:config=%1

参数configDebugRelease。这很好用。

现在有些软件包获得了新的构建配置,例如Release_Child_Config(在我的情况下继承自Release)。我现在必须做(例如):

msbuild ..\lib\Package1.dproj /target:Build /p:config=Release_Child_Config
msbuild ..\lib\Package2.dproj /target:Build /p:config=Release_Child_Config
msbuild ..\lib\Package3.dproj /target:Build /p:config=Release

在此示例中,Package3没有名为Release_Child_Config的构建配置。这意味着我不能再使用一个config参数了。

我希望所有具有特殊构建配置Release_Child_Config的软件包都可以使用它构建,其他软件包应该回退到Release。有可能以某种方式自动化吗?或者我是否必须为每个包创建每个构建配置?

2 个答案:

答案 0 :(得分:0)

尝试使用这两种配置。如果未启用,则应跳过构建:

msbuild ..\lib\Package1.dproj /target:Build /p:config="Release_Child_Config;Release"
msbuild ..\lib\Package2.dproj /target:Build /p:config="Release_Child_Config;Release"
msbuild ..\lib\Package3.dproj /target:Build /p:config="Release_Child_Config;Release"

或将配置顺序更改为“Release; Release_Child_Config”(将首先构建版本)

答案 1 :(得分:0)

直到出现更好的方法是我的临时解决方案:通过脚本生成批处理命令。

  • 脚本输入:要构建的项目列表
  • 脚本输出:包含每个项目的构建命令的批处理文件

脚本查看每个项目文件(.dproj)并进行简单的字符串搜索。如果找到Release_Child_Config,则会将其写入批处理文件:

  msbuild ..\lib\Package1.dproj /target:Build /p:config=Release_Child_Config

如果没有,它会回到这个:

  msbuild ..\lib\Package1.dproj /target:Build /p:config=Release

当然脚本做得更多,所以它也可以用于DebugDebug_Child_Config等类似的情况。到目前为止,它完成了它的工作并适合构建链。