类似三国之仙与大王:建立嵌入式软件开发的自动构建环境

来源:百度文库 编辑:偶看新闻 时间:2024/05/08 02:10:22
 建立嵌入式软件开发的自动构建环境    

每日构建(daily build)已经不是什么新概念了,它已经成为软件项目的基本活动之一。至于它的好处,已经有不少文章和书籍介绍了,这里不再多说了。虽然说,各种软件开发都差不多,但在嵌入式软件开发的这个领域,似乎对于新的方法和概念的接受要较晚一些。笔者曾呆过的两家公司,以前都没有自动构建环境,其它公司的情况则不太清楚。

 

一方面可能是不知道如何实现自动构建环境; 一方面也可能是工作太忙,大家都懒得到去建立这个环境,其实这反而浪费了更多的时间。笔者曾在三家公司建立过自动构建环境,这些知识都很简单,没有什么值得保密的,只是知与不知的问题,如果你恰巧也在做这方面的工作,或许有点帮助。

 

1.         实现定时运行的功能。

       win32下,可以按下列步骤建立一个自动运行的任务:

运行我的电脑-->控制面板-->任务计划-->添加任务计划

按照提示的步骤输入相关信息。

Linux下,可以用atcron建立一个自动运行的任务,具体用法可以查看相关帮助。

 

2.         实现自动获取源代码的功能。目前管理源代码的工具,数开源的cvs和微软的sourcesafe的使用最为广泛。对于前者,虽然现在也有GUI的客户端,但在多数时候,用命令行的cvs反而更地道一点,在脚本中使用cvs的获取源代码,不会有什么问题。而后者,大家用惯了GUI的界面,甚至有人没有听说过sourcesafe的命令行工具,会用的人更为鲜见。幸运的是,微软提供了一个叫作ss.exe命令行的工具,这为自动获取sourcesafe上的源代码大开方便之门。

 

3.         实现自动编译的功能。

a)         Makefile的情况。如果使用makefile管理你的工程,自动编译一点问题也没有。

b)        ADS的情况。如果你使用ADS管理你的工程,你有两种方法可以选择。

                         i.              第一种方法:把mcp转换成Makefile,但ADS本身并不提供这种转换,你需要从网上下载一个mcp2make的小工具。如果你并不是经常在工程里的增删文件,这种方法不错,否则每次增删文件后,都要重新产生Makefile,那就比较麻烦了。

                       ii.              第二种方法:ADS提供了一个叫cmdide的工具,它虽然也是GUI的,但它在编译过程中,无需用户介入。它的使用方法很简单,唯一不爽的就是它的编译错误信息不能保存下来,如果编译出错了,你无法知道到底是哪里出错了。

c)        VC的情况。大多数嵌入式软件开发组,都会在VC里建立一套模拟开发环境。这样,在PC上可以运行大部分功能,这将节省不少调试时间。自动编译VC也好几种方法:

                         i.              第一种方法:从VC工程导出Makefile文件,它的Makefilegmake是不兼容的,要用微软提供的nmake才能编译。

                       ii.              第二种方法:在脚本中运行MSDEV.EXE,可以指定dsw的名称和编译的方式(CLEAN/BUILD/REBUILD),如:MSDEV.EXE c:\temp\t1\t1.dsw /MAKE "t1 - Win32 Debug" /REBUILD

                      iii.              第三种方法:用VC提供的COM接口,调用VC的编译功能。

 

4.         实现自动生成安装包的功能。现在大多数安装工具都提供脚本控制功能,你只要写好一个配置文件,它自动生成安装包。在开发嵌入式软件时,常常不需要这些功能,要做的不过是把程序bin文件、资源文件和下载工具等,拷贝到一个目录下,再把它压缩一个压缩文件就行了。

 

5.         实现自动通知的功能。通知的方式有多种,邮件通知是最为常用的一种。实现很简单,网上已经有一些命令行的邮件工具,可以直接使用。或者下载一个SMTP的库,写很少的代码就可以实现一个SMTP的客户工具。

 

一般来说,自动构建就是以上几个步骤。有的可能复杂一些,比如,有的要求,编译前从指定的位置更新文件,如果编译成功,则要把这些文件checkin到源代码管理系统中; 也有的要求,编译成功后运行自动测试程序。这些功能是辅助性,实施起来难度不大,这里不做详细讨论。

 

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=598988