zoukankan      html  css  js  c++  java
  • Delphi的自动编译软件Want

    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}NSISmakensis" >
          <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>
    
  • 相关阅读:
    深入理解计算机系统cp1:存储单位与编码
    25个JavaScript数组方法代码示例
    中间人攻击,HTTPS也可以被碾压
    用了这么久HTTP, 你是否了解Content-Length?
    C#证明静态方法中的成员在线程之间是独立的
    ASP.NET Core Web API官方文档(链接)
    C#中,隐式转换(implicit)和显式转换(explicit)重载方法,不支持将接口类型作为转换的源类型或目标类型
    ASP.NET Core MVC 和Razor页面中的模型验证(链接)
    C#中JSON字符串中的转义字符
    使用文件流,读写网络共享盘
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3677869.html
Copyright © 2011-2022 走看看