集成与构建指南(4)

原创 2004年03月01日 10:10:00

1          构建基础知识<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.1         Ant构建脚本

自动化构建的核心是表达构件间依赖关系和构建步骤的脚本,Make工具使用makefile,而Ant使用了基于XML格式的缺省文件名为Build.Xml的配置文件。

1.1.1          Ant项目配置文件

Ant配置文件描述了一个构建项目(project),它由一些属性定义(property)和一个目标树(target tree)组成;目标代表了一个期望的构建结果(例如生成一个链接好的可执行文件),并表述了其依赖的其它目标,常见的构建目标有初始化(Init)、编译(Compile)、单元测试(Test)、安装(Install)、清除(Clean)等;每个目标包含了实现它而将要执行的任务(task),Ant支持的任务种类非常丰富,例如源码编译、文件拷贝、执行命令行操作等。Ant还提供一种非常重要的任务就是执行其它的项目配置文件,使得多个构建项目的批处理成为可能。

1.1.2       Ant配置文件示例

下面是一个Ant项目的配置文件示例:

 

<?xml version="1.0"?>

<project name="Improve-Install" default="InstallAll" basedir=".">

<description >

         Build file for all Improve library project

</description>

 

         <!-- task and type extension -->

         <taskdef resource="cpptasks.tasks"/>

         <typedef resource="cpptasks.types"/>

 

         <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>

 

         <!-- Properties -->

         <property environment="sys_env"/>

         <property name="proj.root" location="../."/>

         <target name="-Init">

                   <condition property="cc" value="${mswin32-compiler}">

                            <os family="windows"/>

                   </condition>

                   <condition property="cc" value="gcc">

                            <os family="unix"/>

                   </condition>

                   <echo message="${ant.project.name}: Init Complete"/>

         </target>

        

         <target name="Clean" depends="-Init"

                            description="Clean the temporal building space">

                   <!-- Delete all files in temporal build space -->

                   <delete includeEmptyDirs="true" >

                            <fileset dir="${tgt.bin}" includes="objs/*, objs_d/*" defaultexcludes="false"/>

                   </delete>

                   <delete includeEmptyDirs="true" >

                            <fileset dir="${tgt.lib}" includes="objs/*, objs_d" defaultexcludes="false"/>

                   </delete>

                   <echo message="${ant.project.name}: Clean buildspace Complete"/>

         </target>

 

         <target name="AutoBuild" depends="-Init, -Prep" description="AutoBuild all source to get bin out">

                   <mkdir dir="${tgt.lib}/objs_d"/>

                   <mkdir dir="${tgt.lib}/objs"/>

                   <if>

                            <equals arg1="${cc}" arg2="msvc"/>

                   <then>

                            <cc name="${cc}" objdir="${tgt.lib}/objs_d" outfile="${tgt.lib}/improve_debug" outtype="static"

                                     exceptions="true" multithreaded="true" runtime="dynamic" debug="true">

                                     <compiler extends="${cc}-compiler">

                                               <includepath path="${tgt.interface}"/>

                                               <includepath path="${getenv.BOOST_ROOT}/include"/>

                                               <includepath path="${getenv.CPPUNIT_ROOT}/include"/>

                                               <defineset >

                                                        <define name="WIN32"/>

                                                        <define name="_WINDOWS"/>

                                               </defineset>

                                               <compilerarg value="/W3"/>

                                               <compilerarg value="/GR"/>

                                               <compilerarg value="/O2"/>

                                     </compiler>

                                     <linker extends="${cc}-linker">

                                               <linkerarg value="/machine:I386"/>

                                               <!--fileset dir="${getenv.LIBS_ROOT}/lib" includes="3d_party.*"/-->

                                     </linker>

                                     <fileset dir="${tgt.src}">

                                               <include name="**/*.cpp"/>

                                               <include name="**/*.c"/>

                                               <exclude name="exception_ex.*"/>

                                     </fileset>

                            </cc>

                           

                   <echo message="${ant.project.name}: AutoBuild Complete"/>

         </target>

 

 

         <target name="Test" depends="-Init, TestBuild" description="Perform acception testing">

                   <exec executable="test_main_debug.exe" dir="${tgt.bin}"

                                     failonerror="true" vmlauncher="false" os="Windows 2000">

                            <env key="Path" path="${getenv.Path};${getenv.CPPUNIT_ROOT}/lib;${getenv.BOOST_ROOT}/lib"/>

                   </exec>

                   <echo message="test_main.exe <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Debug Version Testing Pass"/>

                   <exec executable="test_main.exe" dir="${tgt.bin}"

                                     failonerror="true" vmlauncher="false" os="Windows 2000">

                            <env key="Path" path="${getenv.Path};${getenv.CPPUNIT_ROOT}/lib;${getenv.BOOST_ROOT}/lib"/>

                   </exec>

                   <echo message="test_main.exe Release Version Testing Pass"/>

                   <echo message="${ant.project.name}: Testing Complete"/>

         </target>

        

 

         <target name="InstallAll"

                            depends="CleanAll, AutoBuild, Install, Test"

                            description="Make a clean (re)install and test">

                   <echo message="${ant.project.name}: Install/Reinstall Complete"/>

         </target>

 

</project>

 

在此Ant配置文件中定义了项目将引用的一些property,例如环境变量、项目的根目录路径、指定的编译器等;项目的缺省构建目标为InstallAll,它通过依赖定义,使得初始化(Init)、清除(CleanAll)、编译(AutoBuild)、安装(Install)、测试(Test)等目标依次执行;AutoBuild目标执行的cc任务,将对源码进行编译,并通过includepath设置了编译头文件的查找路径,通过linker段指定了需链接的库3d_party.lib

本项目中各Ant配置文件的具体配置和使用,请参见Ant用户手册等参考资料,和阅读Ant配置文件本身内容。

1.1.3       Ant执行示例

Ant在命令行下执行的示例:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-2-291844260.png

《ZeroC Ice 权威指南》笔记

Ice介绍         Ice(Internet Communications Engine)是ZeroC公司的杰作,继承了CORBA的血统,是新一代的面向对象的分布式系统中间件。Ice是RPC通...
  • Jerome_s
  • Jerome_s
  • 2016年03月07日 19:25
  • 8975

《程序员代码面试指南 IT名企算法与数据结构题目最优解》左程云著 pdf

下载地址:网盘下载 内容简介  · · · · · · 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代...
  • cf406061841
  • cf406061841
  • 2017年05月27日 19:15
  • 3207

【Jenkins系列之一】Jenkins持续集成环境搭建完全指南

Jenkins是一个持续集成服务器,能够代替人进行很多复杂枯燥重复性的工作,是一个优秀的自动化构建工具。 安装 下载地址:http://jenkins-ci.org/,选择Windows的native...
  • liuchunming033
  • liuchunming033
  • 2015年02月02日 14:50
  • 4029

spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)

之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都...
  • x6582026
  • x6582026
  • 2018年01月09日 17:41
  • 26

VR系列——Oculus Audio sdk文档:四、传统Oculus声场定位技术的统一集成指南(4)——如何在Unity中使用Oculus声场定位技术

准备好开始的时候,我们建议您创建一个新的Unity项目并导入OculusSpatializer.unitypackage,然后在OSP测试场景文件夹中观察OSPTest场景。这对熟悉相关资源和声场定位...
  • huayuQA
  • huayuQA
  • 2016年11月24日 21:20
  • 702

VS2010与PCLint集成指南.part4

  • 2014年02月18日 08:51
  • 72KB
  • 下载

集成与构建指南

  • 2007年10月11日 22:23
  • 442KB
  • 下载

构建基于CXF的WebService服务(4)--CXF与SpringMVC集成

SpringMVC的配置就不多说了,这个在网上有很多的资料
  • jaune161
  • jaune161
  • 2014年05月26日 13:46
  • 14914

Sprite Kit编程指南(4)-构建场景

构建场景 对于场景的使用,你已经学过了很多的东西。这里对重要的事实再快速回顾一下: ·      场景(SKScene对象),用来提供SKView对象要渲染的内容。 ...
  • xianghuibeijing
  • xianghuibeijing
  • 2014年07月10日 10:50
  • 370

Sprite Kit编程指南(4)-构建场景

构建场景 对于场景的使用,你已经学过了很多的东西。这里对重要的事实再快速回顾一下: ·      场景(SKScene对象),用来提供SKView对象要渲染的内容。 ·      场景的内容被创...
  • IT_Magician
  • IT_Magician
  • 2013年08月08日 14:32
  • 2536
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:集成与构建指南(4)
举报原因:
原因补充:

(最多只允许输入30个字)