Delphi自动编译环境的搭建及使用

什么是Want

Want是一套Windows下用于编译Delphi源代码的工具.Want的名称是Windows Ant的意思. Ant是Java下最著名的自动编译工具,因此作者起名为Want.

为什么要使用Want

借助Want我们可以对Delphi的源代码进行自动化的编译,并且针对关键的业务代码或函数, 我们可以编写单元测试代码,借助Want,先编译单元测试代码,自动运行单元测试程序, 如果失败,则通过编译日志发送到指定的邮箱中或者Web页面上.如果编译成功,则可以编译源程序.然后再通过打包功能,把可执行文件和运行程序必须的库文件打包到Zip和Setup安装文件,并发布到内部的网络上,供测试人员进行代码测试.由于做到了自动编译,我们可以每天发布一个NightlyBuild版本.在当天晚上自动运行.通过自定义脚本,自动检查代码常见问题及风格样式,如创建了对象却没有释放的问题.并且.当第二天上班时,研发人员可以得到一个代码隐患列表.测试人员可以得到一个日构建测试版本.并且从SVN中提取新增的功能,供测试人员注意.

Want只是实现这些功能的第一步.下面,我们说一下如何逐步的实现这些功能.

如何配置Want环境

Want的运行只需要一个可执行文件,即Want.Exe在自动编译服务器上,不需要安装Delphi开发环境,只需要把你在别的机器上安装好的Delphi复制到编译服务器上即可,我们用不到Delhi的IDE开发环境,只用到了他的编译器,因为虽然Delphi2007以后的IDE开发环境是基于.net的,但是编译器还是纯Win32程序,所以,只要装完操作系统即可,无须任何第三方程序或组件包,甚至我们可以在Linux,Freebsd下安装Wine模拟器,这样我们连安装Windows也省了,这也正是我在公司所采用的办法。

对于研发人员,我们可以使用Dof2Want小程序来帮我们把dof项目选择文件生成want.xml编辑配置文件.

Dof2want,由于Want是采用XML文件格式描述Delphi工程配置信息的.而Delphi本身生成的配置选项文件是Dof文件.所以,我们需要这样一个工具把Dof文件转换成Want的XML文件.

生成Want.XML文件

1自动生成当前目录下所有的子目录中Delphi项目的Want.xml文件.

2手动生成每个项目的Want.xml文件. 执行WangGen.exe程序,打开源代码所在目录,然后点击菜单"生成XML文件",则可以生成Want.XML文件. 然后点击"运行Want文件",就可以查看编译是否成功,如果不成功,则需要手工修改XML文件配置.

如何自动编译所有的模块

在各个模块的父文件夹中,写一个文件,内容如下

<?xml version="1.0"?>
<project name="compileall" basedir="." default="all">
<target name="all" depends="Test1,Test2,Test3">
</target>
<target name="Test1">
<want dir="Test1"
description="编译Test目录下的项目" />
</target>
<target name="Test2">
<want dir="Test2"
description="编译Test2目录下的项目" />
</target>
<target name="Test3">
<want dir="Test3"
description="编译Test3目录下的项目" />
</target>
</project>

在命令行下输入want命令,就会编译所有相关的模块了。如果把这个Want命令放到计划任务中,则可以每天晚上自动编译程序所有的相关模块. 如果编有单元测试的代码,也可以自动编译单元测试代码,运行单元测试代码.

常见问题解答:

1 如果我装了几个不同版本的Delphi,该如何指定我要求的版本?
在环境变量中指定delphi_version的值,如果为Delphi5,则值为5,Delphi7则值为7,以此类推,

2 包的dcp和bpl的输出路径怎么设置?
在<dcc段的属性中,增加 dcpoutput="../dcp"
bploutput="../bin"即可

3
如何指定查找路径,比如我的程序依赖于某个路径下面的包.
在<Dcc></Dcc>段中,增加<unitpath
name="../dcp" />即可. 也可以起一个模式名

 <patternset id="sources">
<include name="..\dcp" />
</patternset>

然后在Dcc节中,增加 <unitpath refid="sources" /> 即可.


Q 如何在Want中用NSIS将程序打包成安装程序

A 这是一个Cnpack打包成安装程序的例子

  <!-- 制作安装程序 -->
<target name="makeinst" description="Build CnWizards Installer." >
<copy tofile="${install.src}/release.inc.old" unless="ismaster" >
<include name="${install.src}/release.inc" />
</copy>
<echo input="${install.src}/release.template.inc" file="${install.src}/release.inc" />
<exec basedir="${install.src}" defaultfilters="true"
executable="${ProgramFiles}\NSIS\makensis" >
<arg value="CnWizards_Install.nsi" />
</exec>
<delete dir="${install.src}" unless="ismaster" >
<include name="${install.src}/release.inc" />
</delete>
<move tofile="${install.src}/release.inc" unless="ismaster" >
<include name="${install.src}/release.inc.old" />
</move>
</target>

Q 如何删除一个文件?

A 用Delete指令即可,如下

<project default="aa">
<target name="aa">
<delete basedir="z:\">
<include name="z:\1.doc" />
</delete>
</target>
</project>

要注意的是,delete的basedir属性必须要和include name属性是同一个驱动器或者路径,否则会提示:Will not scratch z:\3.doc outside of I:即,不能删除当前路径外面的文件.


Q 在一个目录中有两个项目文件,如何在总的自动编译Want文件中指定编译哪一个?

A

  1. 在该目录下生成特殊名称的自动编译文件,如Want_1.xml,
  2. 在总的Want文件中采用指定的参数BuildFile进行指定的项目文件编译.
  <target name="jhcbhs">
<want dir="各模块目录\成本核算\作业成本核算"
BuildFile="want_jh.xml"
description="计划成本核算" />
</target>

Delphi的自动编译软件Want的更多相关文章

  1. [CI] 使用Jenkins自动编译部署web应用

    写在前面 初步接触持续集成自动化过程,本篇主要介绍基于Jenkins实现持续集成的方式,通过案例介绍线上自动编译及部署的配置过程 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作 ...

  2. linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

    原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html  之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...

  3. GCC源码自动编译-python脚本

    一.前言 目前因机器OS GCC版本太老,导致无法编译一些新版本软件,所以写了一个自动编译GCC的python脚本,操作系统是比较老的suse 10, 很多系统自动软件版本都很低,所以此脚本一般可适用 ...

  4. Android 源代码自动编译packages/apps

    /*************************************************************************** * Android 源代码自动编译packag ...

  5. 项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website automatically】

    在上一篇教程项目管理实践[三]每日构建[Daily Build Using CruiseControl.NET and MSBuild] 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目 ...

  6. InnoSetup 以命令行自动编译打包

    本章介绍,在新建Innosetup的编译脚本iss文件后,在不运行Innosetup软件的基础上,以bat自动编译运行打包. 一.添加Innosetup软件包 下载InnoSetup软件包并解压到bu ...

  7. dnSpy 强大的.Net反编译软件

    作者:D.泡沫 一说起.net的反编译软件,大家首先想到的就是Reflector,ILSpy,dotPeek等等.而dnSpy同样是一款优秀的反编译软件,同时它是开源免费的.官方的描述是: dnSpy ...

  8. rebar3自动编译

    功能:修改完代码可以自动编译加载到VM中 必须安装的软件: Linux: inotify  链接https://github.com/rvoicilas/inotify-tools/wiki 配置: ...

  9. webstorm 设置 sass自动编译问题

    sass语法.使用它带来的好处,就不再这里做介绍了,主要看怎么在webstorm里配置自动编译. sass编译是需要Ruby环境的,可以到这里去下载  :  https://rubyinstaller ...

随机推荐

  1. linux通过sendmail发送邮件

    安装sendmail: [root@li676-235 ~]# yum install sendmail 安装好后执行. [root@li676-235 ~]# /etc/init.d/sendmai ...

  2. Spring bean 配置

    1.传统的创建对象的方式:JedisMall tardition=new JedisMall(); 这样是在程序运行时创建,表示当前模块已经不知不觉和new出的对象耦合了,而我们通常都是更高层次的抽象 ...

  3. 走进异步编程的世界--async/await项目使用实战

    起因:今天要做一个定时器任务:五分钟查询一次数据库发现超时未支付的订单数据将其状态改为已经关闭(数据量大约100条的情况) 开始未使用异步: public void SelfCloseGpPayOrd ...

  4. git 入门常用命令(转)

    Git工作流程:D:\projects\Setup2\Setup2\Setup2\Express\SingleImage\DiskImages\DISK1 git clone工作开始之初,可通过git ...

  5. 刘昕鑫 C# 特性详解

    C# 特性详解 特性(attribute)是被指定给某一声明的一则附加的声明性信息. 在C#中,有一个小的预定义特性集合.在学习如何建立我们自己的定制特性(custom attributes)之前,我 ...

  6. wpf 千位符 格式化字符串

    StringFormat={}{0:N2}}//格式话字符串,增加千位符,2保留小数点后2位 StringFormat={}{0:N0}}//格式话字符串,增加千位符,无小数点后

  7. PHP 操作redis 封装的类 转的

    <?php/** * Redis 操作,支持 Master/Slave 的负载集群 * * @author jackluo */class RedisCluster{           // ...

  8. 家庭房产L2-007

    较为麻烦的并查集 主要是我的模板是错的检查了好久.... 先是输入 把每个家庭连在一起 输出的家庭编号为该家庭所有编号的最小值  在并查集里面完成 第一次 0~n-1遍历储存好 家庭编号 和房子面积和 ...

  9. SQL2008配置管理工具服务显示远程过程调用失败

    问题: 打开SQL2008配置管理工具,发现SQL服务名称里什么也没有,只有一个提示:   解决办法: 这是由于电脑中安装有Visual Stuido, 它内含一个本地SQL数据库服务:Microso ...

  10. leetcode 树的锯齿形状遍历

    二叉树的锯齿形层次遍历     给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,n ...