编译小结(8)巧用脚本做多系统多数据库版本程序的自动化编译
来源:互联网 发布:萤火虫壁纸软件手机 编辑:程序博客网 时间:2024/06/03 22:07
在做C/C++与数据库相关开发时,编译时会用到数据库的include与lib文件,而因为数据库在同一系统会有多个版本都需要编译,如Oracle有9i,10g,11g等。不同数据库版本在不同操作系统上都要编译,是件很烦的事。
因为代码都一样,仅仅因为引用不同,就要编译这么多次。为了有更多的时间做更有意义的事,写个脚本来实现自动化编译是很自然的事。
因为代码都一样,仅仅因为引用不同,就要编译这么多次。为了有更多的时间做更有意义的事,写个脚本来实现自动化编译是很自然的事。
如果项目是直接手写Makefile文件那还比较好写,可惜这个项目用的是Automake. 这个东东弄时步骤就要多点。
用Automake时,关键文件我认为只有两个configure.in 与Makefile.am. 其中后者定义了编译参数,其中自然就包括了每次编译要引用的include与lib路径。只要用脚本搞定这个文件就行了。步骤如下:1. 新增一个目录,将用于存放脚本及编译模板mkdir -p /xcl/template2. 在所需的每个操作系统中,按正常流程把数据库每个版本跑一遍Automake的编译。并将每次编译时的Makefile.am复制到 /xcl/template 目录下,并按脚本规则命名。具体规则在后面有说明 。
cp Makefile.am /xcl/template/Makefile.am_lib_LX_ORA10Gcp Makefile.am /xcl/template/Makefile.am_lib_LX_DB2V9
这些按规则排列的Makefile.am文件,将作为以后编译的模板文件。
3. 然后运行脚本,进行编译大至过程如下:
[root@O11g64 agent]# sh *.shDBAgent Compiler Systemplease choice[1,2,3]:1)Oracle Application2)DB2 Application3) Exit2********DB2 Version**********1)DB2 V92)DB2 V103)ALL4)Exit******************************Enter option[1,2,3,4]:1DB2 V9********Operating System**********1)Linux(64bit)2)AIX3)HP-UX4)SUN5)Exit******************************Enter option[1,2,3]:2。。。。。。这样,在编译时只要选一选就会依条件自动编译出来,并将其依操作系统与版本命名并自动归并到指定目录下。另外因为集中在一起打包起来也很方便。
原理也很简单,在代码目录下,用make distclean清掉原来的,再依条件将template目录下的模板Makefile.am替换到代码所在目录下。运行.configure 与 make 即编译出来了,再编译出来的文件依规则命名后复制到指定目录下即可。
附上部份代码
#! /bin/sh #############################开始部份代码 #定义代码目录及所引用的头文件与动态库所在目录 lib_DB2Path="/xcl/work/app/DB2App" lib_LX_DB2V9=${lib_DB2Path}"v9_Lx64/" lib_LX_DB2V10=${lib_DB2Path}"v10_Lx64/"lib_AIX__DB2V9=${lib_DB2Path}"v9_AIX/" lib_AIX__DB2V10=${lib_DB2Path}"v10_AIX/"#编译脚本当前路径 ShPath=`pwd` echo $ShPath......#部份中间代码 #进入代码所在目录 cd $Path_OracleAppecho "" #清除原来的Makefile及相关文件 make distclean #清除旧的Makefile.am文件 rm -f Makefile.am #将模板文件目录下指定操作系统,指定数据库版本的Makefile.am复制到代码编译目录 cp ${ShPath}/template/${cur_mkam} Makefile.am #下面三个Automake命令生成新的链接库或可执行文件 automake -a ./configure make #删除脚本目录下的子目录release中原来的.so文件 rm -f ${ShPath}"/release/"${cur_soname}".so" #将Automake编译出来.so文件,将其复制脚本目录下的子目录release cp .libs/*.so ${ShPath}"/release/"${cur_soname}".so".......#最后部份 #返回代码目录,查看编译结果 cd $ShPath
如果把这些脚本再扩展下,可以做一些项目的自动化编译与发布系统。就看有没有需求了。
MAIL: xcl_168@aliyun.com
BLOG:http://blog.csdn.net/xcl168
0 0
- 编译小结(8)巧用脚本做多系统多数据库版本程序的自动化编译
- 利用Ant 做Android自动化编译实现自动签名, 以及一次生成多个渠道版本.
- 编译opencv程序的脚本
- 软件自动化编译脚本初步
- dpdk自动化编译设置脚本
- 自动化编译shell脚本_jenkins
- 同时编译多个版本的脚本写法
- c/c++程序的编译过程小结
- nmake编译boost程序的脚本
- 【Unity3d】在Unity3d中调用外部程序及批处理文件,写自动化编译脚本需要注意的地方
- Linux程序编译链接动态库版本的问题
- Linux程序编译链接动态库版本的问题
- ARX程序的升级及多版本编译须知
- 多版本Qt程序的编译注意问题
- DDK编译的程序增加版本信息
- 最新自动化编译脚本,关于gradle编译遇到的一些问题的解决方案
- Gradle Android最新自动化编译脚本
- 自动化编译arm版linphone脚本
- sql 语句 优化
- linux中shell变量$#,$@,$0,$1,$2的含义解释
- “0xC015000F 正在被停用的激活上下文不是最近激活的”错误解决方法
- 【Java多线程】AtomicInteger使用
- 看懂论文的机器学习基本知识(二)
- 编译小结(8)巧用脚本做多系统多数据库版本程序的自动化编译
- 在MyEclipse2014中利用hibernate将oracle 11g中的“表”反转成“类”的步骤。
- 用API创建用户
- 【html】html 的基本标签的用法
- Android_PopupWindow使用介绍
- ubuntu安装fcitx失败Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution)
- C# 异步显示进度条的两种方法(BackgroundWorker和Thread)
- Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/sc
- FusionCharts 组件开发