只使用MS Build可以实现Delphi构建自动化和持续集成吗?

时间:2010-02-22 18:32:31

标签: delphi msbuild build-automation

我希望实现一个连续的单元测试运行系统,我听说称之为“冒烟”或“tinderbox”,(一个构建服务器可以执行干净的版本控制检查以及给定的所有内容的完整系统构建源代码库或项目),以及类似于小团队的“持续集成”,使用Delphi。

我不愿意承诺使用商业“构建服务器”产品,我希望我可以通过内置于delphi中的MS-Build支持来做很多事情。

我正在寻找资源,想法和入门的地方。我不知道如何使用MS Build来达到这个目的。 Steve Trevethen有一个博客文章,可以对旧的dcc32命令行构建进行一些讨论,有些评论提到了自delphi 2007以来一直在这里的ms-build。我正在使用Delphi 2010.我正在寻找指导和那些告诉我的洞察力和经验,这是一条合理的道路,如果没有,我应该走哪条路呢?

我发现你可以使用/ p:DCU_DcuOutput =从msbuild命令行覆盖Unit(DCU)和EXE Output Directory。请注意,我查看了我的DPROJ文件中的XML,以找出如何覆盖内容。

但是,它只执行make,而不是构建,并且/ t:rebuild不起作用(编辑:是的。它在DPROJ文件上工作正常,但在GroupProjects上没有。)

我希望在那里有更多的MSBuild-with-Delphi文档? “Rad Studio 2010”产品文档中的MS-Build帮助显示了关于MS-Build的一两件事,但是非常粗略和不完整。

相关问题:

MSBuild command lines

3 个答案:

答案 0 :(得分:16)

Delphi 2010使用MSBuild作为它的主要构建引擎。这意味着IDE和命令行都完全相同。这也意味着您可以使用命令行轻松构建现有项目。事实上,我们德尔福团队一直都在做这件事。您无需担心编译器本身的开关 - IDE创建的DProj文件

在“开始”菜单上有一个命令行,用于将MSBuild与现有的Delphi项目一起使用。它正确设置了环境,因此您只需调用:

msbuild myproject.dproj

您还可以从命令行调用特定的构建配置,使用IDE可以使用MSBuild的命令行参数轻松创建所述配置。

如果您想自己创建环境,可以运行rsvars.bat批处理文件进行设置。该文件可以在\ bin目录中找到,并且应该可以从默认命令行获得。

该文件包含以下内容:

@SET BDS=<your BDS directory>
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN

因此,如果您想创建自己的持续集成构建,可以使用MSBuild轻松管理Delphi构建。

答案 1 :(得分:11)

dproj和groupproj是msbuild文件,您可以查看它们。信息的其他部分可以在msbuild安装路径(C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727)中找到。你会在那里找到几个Borland。*。目标文件。

在msbuild脚本中,您可以看到以其命名的不同目标。例如,groupfile包含Make,Clean和Build目标,您可以使用/ t参数指定这些目标。 dproj文件也是如此。 dproj文件也有一个ReBuild目标。它做了一个Clean然后是一个Build。如果要对groupfile具有相同的效果,可以指定两个目标:/ t:Clean; Build

您还可以在/ p中找到许多参数。例如,配置指定配置或DCC_Quiet指示dcc32停止输出无用的空格。

因此,从命令行执行使用Release配置的构建是以下命令:

msbuild mygroup.groupproj /p:Configuration=Release /t:Build

免责声明:我查看了Delphi 2007的msbuild文件。后来的Delphi版本可能已经更改了目标或参数的名称。只需查看msbuild脚本,找出哪个是。

答案 2 :(得分:4)

我不确定这是否是您需要的,但我已经为{2}设置了CruiseControl.NET用于Delphi 2009的持续集成 - 以及DUnit测试.CCNET有一组特定的任务用于MSBuild,而不是一些设置问题,它对我来说非常适合。

如果你需要,我可以让你知道我必须做些什么。

标记