关于自动编译的一点经验


我关于自动编译的一点经验
一个项目想要成功,那配置管理的努力是必不可少的。如何做一个好的配置管理,同时减轻自己的负担,那就是一个值得认真思考的问题拉。
一个产品想要实现持续集成及日创建,那么非得有一套好的自动编译系统支撑才可以,否则对于一个庞大的系统而言,一个配置管理就算累死也无法满足需求的。
下面以我的经验说说任何构建一个自动编译系统。
为了更好的自动编译,我想应该建立一个这样的系统,那就是:
1、开发人员或定时触发。
2、自动更新编译环境。
3、自动编译。
4、自动分析编译结果。
5、自动通知开发、测试及配置管理员。
下面我假设情况如下:
1、操作系统:平台包括:HP-UX、SunOS、AIX、Linux 、Windows (均包括多个版本)、。
2、数据库包括:oracle 8i、9i、10G
3、编译器包括:aCC、CC、xlC、gcc、bcb(windows 上的集成开发环境) 、java(包括多个版本)
4、项目规模超过千万行代码、模块众多、调用复杂。
那么在这样一个情况下,如果我们考虑用一般的商用工具做,显然成本是很高的。
对于这样一个庞大,复杂的系统,我想在项目启动后,首先要做的是:
1、定义编码规范。
2、定义C++及java的编译选项(由于C++语言中编译器及平台版本不同,32、64位要求及数据库的版本等不同要求,所以编译选项显然要提取出来单独处理)。
3、定义Makefile 规范。
4、定义模块目录结构。
5、定义接口提供方式。
在定义以上内容的时候,一定要遵循一个原则,符合命名规范、尽量可配置、易懂、易于理解。最后组合出的编译命令的字符串不要太长(unix操作系统下,不同版本的shell 对一个命令的长度有不同要求、同时由于Makefile中如果有很多shell 脚本的话,编译性能也会受影响)。
在我用过的系统中,make 工具,unix 平台我们使用的是 GNU make 版本3.80,java 用的是 ant,windows 平台C++用的是bcb 自带的make,不过在编译前先要将bcb的工程文件bpr文件转换为Makefile文件,使用的工具是bpr2make(之所以不用bcb直接编译,主要是为拉自动编译,自动分发编译结果)。
为了更好的跟踪代码及需求、bug变更情况,自动编译系统,应该从开发人员提交代码开始,到发布结束。
流程如下:
1、开发人员提交代码。
2、编译脚本触发,从版本库更新代码到编译服务器。
3、设置编译需要的环境变量。
4、构造编译需要的Makefile。
5、执行编译。
6、分析编译结果、记录编译结果。
7、发邮件通知开发、配置管理、测试人员等相关人。
8、更新到测试环境测试。
9、配置管理员发布。
下面我以cvs或svn为源码版本库做作说明,需要写一些适当的脚本,并且需要数据库的配合才能工作的比较顺利。
1、建议用户表
2、在数据库中建立产品表。
3、在数据库中建立模块表(需要记录模块优先级、模块路径、Makefile 文件的名称等功能)。
4、建立需求表、任务单表、bug表、编译记录表。
5、编写代码提交脚本。实现提交代码的同时,在编译记录表中增加记录,并关联需求单、任务单、BUG单功能。
6、编写自动编译脚本。实现定时查询数据库,根据编译单,进行编译的功能。需要实现,获取编译单后,自动生成编译环境所需的环境变量,构造编译用Makefile,更新待编译代码,编译完成后分析编译结果,给被编译代码打tag,获取编译结果的特征串,然后记录到数据库中,并发邮件通知开发人员、测试人员及配置管理人员。
如果以上脚本实现,那么,不管你是要日创建还是随时编译,还是全系统编译,都是轻松的事情拉。
虽然windows 平台和unix 平台差别很大,c++和java的差异也很大,但是如果大家将以上要求都用函数实现。我想迁移还是很方便的。
尤其是脚本语言,多数是支持跨平台的。
这里主要可能碰到的问题是。
1、模块结构规划不合理。
2、公共调用文件的安装问题。
3、模块编译顺序的问题。对于复杂的系统,那么调用关系就决定了编译顺序,可能要多次调整。
4、编译结果的安装问题。最好是编译完成通知测试人员,让他们自己安装。否则你自动杀掉他们正在测试的进程,他们会找你算账的。
5、编译结果的分析问题。编译结果的分析就需要自己写正则表达式来分析日志了,级联编译中是无法通过失败信号获取编译失败的,只能分析日志。
6、邮件发送问题。unix 平台,配置好DNS和sendmail就好啦,windows平台,如果没有找到你所用脚本语言的邮件发送函数,那么你就的自己用telnet 加 smtp 协议实现拉。
可能有人奇怪我为什么要设计一个数据出来,我想如果有数据库的话,方便维护人员根据编译目标文件的特征串,查找出,这是那一次编译的,生成他的源码有那些,具体版本是什么。
同时也可以查找出是为那个需求或BUG而修改代码的,修改了那些地方等。同时也可以通过数据库统计,分析出,模块代码的变更情况和工作量,进度等。
同时也可以分析出那些人老是提交错,经常容易犯那些错误,编译流程改进,作为cmmi 5级的数据提供。

 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个基于Python的Web开发框架,主要用于快速构建功能强大的Web应用程序。编译.so库是将Python代码转换为可执行的共享对象库(Shared Object Library)的过程,可以提高代码运行效率和程序性能。 在Django中,通常不需要对Python代码进行单独的.so库编译。因为Django的核心功能已经使用C语言编写的Cython扩展实现,这些扩展会在Django模块被导入时自动加载。这些Cython扩展已经编译为共享对象库,并与Django一起分发。 不过,在某些情况下,你可能需要编译自己的.so库来提高某些特定功能的性能。为了实现这一点,你可以使用Cython将Python代码编译为C语言代码,然后使用GCC等编译器将C语言代码编译为.so库。 首先,你需要安装Cython和GCC等编译工具。然后,将Python代码保存为一个Cython模块(文件后缀为.pyx),使用Cython命令将其编译成C语言代码(文件后缀为.c)。接下来,使用GCC等编译器将C语言代码编译为.so库。 编译.so库的过程相对复杂,需要一定的开发经验和知识。因此,在大多数情况下,我们建议使用Django提供的已编译的Cython扩展,以确保代码的性能和稳定性。 总结来说,对于Django的大部分开发者来说,不需要手动编译.so库。Django使用Cython扩展提供了高性能和稳定性,可以满足大部分的Web应用需求。只有在特定需求下,才需要手动编译.so库来提高特定功能的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值