【问题标题】:How to handle different per-project build configurations when doing automatic builds?在进行自动构建时如何处理不同的每个项目构建配置?
【发布时间】:2012-01-14 00:23:44
【问题描述】:

在深入了解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。有可能以某种方式自动化吗?还是我必须为每个包创建每个构建配置?

【问题讨论】:

  • 你在%1传递批处理脚本是什么?
  • 您可以在您的 .bat 文件中使用 if 语句将 Release 转换为 Release_Child_Config 用于需要的项目。但似乎你正在为自己的生活变得艰难。为什么不坚持简单的 Release?
  • 有两个不同的版本。 “正常”版本 (Release) 和“特殊”版本 (Release_Child_Config)。特殊的是“正常”加 X。我需要能够自动构建它们。

标签: delphi build-automation delphi-2009


【解决方案1】:

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

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”(将首先构建发布)

【讨论】:

  • 你确定吗? .dproj 文件有几个相等性检查,例如 '$(Config)'=='Release' 以及 msbuild 的命令行文档提示 Release_Child_Config;Release 将被视为单个值。
  • It sholud work. 内部应视为ItemList。
  • 嗯,它做了一些事情,但不是我指定为config。似乎它使用Base。我敢打赌,.dproj 文件必须准备好为单个参数处理这样的值列表,但事实并非如此。
【解决方案2】:

在出现更好的情况之前,我的临时解决方案是:通过脚本生成批处理命令。

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

脚本查看每个项目文件 (.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 等类似情况。到目前为止,它完成了它的工作并适合构建链。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多