利用perl脚本帮助编译多环境下的多个symbian工程

原创 2006年05月22日 16:37:00

         有时候在多个平台下需要编译多个应用,自己去一个一个打控制台命令就觉得很麻烦,再加上环境变量的设置那就更麻烦了,特别是symbian这种版本很多的平台控制台命令又特别长的就特别严重。

symbian手机使用的平台对应的SDK比较典型的几个:


         SDK1.2               SYMBIAN6.1                       nokia  NG QD,7650


        
SDK2.0               SYMBIAN7.0                       nokia  6600

 

    我们开发的程序当然希望所有的手机都能跑,但是在SDK2.0下面编译的界面程序是不能在symbian6.1平台下的跑的,如果你想写一个在S60下都能跑的APP应用,那么就必须要兼容以前的老界面库,你需要在SDK1.2SDK0.9就不考虑了)的环境下编译这个APP,以便支持QD这类卖得很好又是6.1平台的手机。然而SDK1.2毕竟是老版本,缺少很多API的支持,写EXE类似的程序当然是SDK越新越好,因为调用的是系统底层函数,很少有6.1不支持的(老的SDK只是没有公开这些API)。

    这就涉及到一个环境切换的问题,symbian有提供了一个解决方案,有一个叫environmentswitch.exe东西可以在开发环境之间切换,但是我个人感觉还是麻烦了,不太好用,所以试试了,环境切换其实可以直接通过修改环境变量的方法来解决,SDK安装后会在系统环境变量中加入一个叫EPOCROOT的值,用来指示当前使用的SDK,比如SDK1.2安装后会设置为/Symbian/6.1/Series60/,而SDK2.0安装后设置为/Symbian/7.0s/Series60_v20/,经过测试可以直接修改这个值来达到切换环境的目的。

    另外一个比较麻烦的是有多个APPDLL或者EXE需要编译,那么可能需要开很多个控制台来输入编译命令,加上参数又多,真是麻烦啊且很容易搞错了。所以就用perl来解决这两个问题吧,perl我不熟,只是为了解决这个小问题学了下,高手见笑了。

    首先把自己的工程组织在一个目录下,比如/project/test1/, /project/test2/下面包含symbian的那堆目录groupincsrc什么的,假定test1需要用SDK1.2环境编译,test2需要用SDK2.0编译,然后开始写脚本。


#! ./perl


use Win32;


#


#这里是把stderr的输出重定向到当前目录下的err.txt中去(编译连接错误多了在控制台中看得眼花,当然你一直在IDE中编译不存在这个问题,如果是做移植这个方法我觉得还是很有用处)


#


open (stderr, ">err.txt") || die ("open stderr failed");

#


#工程表


#


@projectList = ('test1',


                              'test2');

#


#环境变量初值


#


$S60_70 = "//Symbian//7.0s//Series60_v20//";


$S60_61 = "//Symbian//6.1//Series60//";


 


#


#判断下参数数量,不对就打help


#


if (@ARGV < 1) {


         print ("Not enough argument/r/n");


         disHelp();


}


#


#第一个参数是编译平台我一般就用armithumb,不对就打help出来


#


$buildType = @ARGV[0];


if ($buildType cmp "armi" && $buildType cmp "thumb") {


         print ("wrong argument : $buildType/r/n");


         disHelp();


}


#


#再加个参数-c表示是否先clean一下


#


$cleanFlag = @ARGV[1];


if ($cleanFlag cmp "-c" && $cleanFlag cmp "") {


         print ("wrong argument : $cleanFlag/r/n");


         disHelp();


}


#


#开始循环编译所有的编译


#


for my $item (@projectList) {


         #如果是test1就换成6.1的环境


         if ($item eq "test1") {


                   changeEnvTo61();


         }


         else {


                   changeEnvTo70();


         }

         #如果有-cclean一下


         if ($cleanFlag eq "-c") {


                   print "#--------------------------------------------------------------#/r/n";


                   print "             start to clean $item               /r/n";


                   print "#--------------------------------------------------------------#/r/n";


                   system ("//project//$item//group//abld clean $buildType urel");


         }      


         print "#--------------------------------------------------------------#/r/n";


         print "             start to build $item               /r/n";


         print "#--------------------------------------------------------------#/r/n";


         system ("//project//$item//group//abld build $buildType urel");


}

#设置环境变量为6.1


sub changeEnvTo61()


{


         use Env qw(EPOCROOT);


         undef $EPOCROOT;


         $EPOCROOT .= $S60_61;


         print ("change EPOCROOT = $EPOCROOT/r/n");


}

#设置环境变量为7.0


sub changeEnvTo70()


{


         use Env qw(EPOCROOT);


         undef $EPOCROOT;


         $EPOCROOT .= $S60_70;


         print ("change EPOCROOT = $EPOCROOT/r/n");


}

#help


sub disHelp()


{


         print "test.pl [CPU] [OPTION]/r/n";


         print "[CPU]:/r/n";


         print "      armi/r/n";


         print "      thumb/r/n";
         print "[OPTION]:/r/n";


         print "      -c : clean project first/r/n";


         close (stderr);


         exit(0);


}


#关闭stderr重定向


close (stderr);



        
到这就结束了,控制台中输入perl test.pl armi –c就可以先clean再编译这两个工程了,如果还嫌麻烦,再写个build.bat里面写上一句话perl test.pl %1 %2,调用的时候build armi –c就可以了,比以前打的命令少多了。

利用perl脚本执行拒绝攻击的代码

#!/usr/bin/perl -w use strict; use IO::Socket::INET; use IO::Socket::SSL; use Getopt::Long; use Conf...

android开发之采用perl脚本语言开发ota差异包自动编译脚本

Ota差异包自动编译脚本功能 每天服务器自动调用进行编译,考虑到必须全部自动化,那么该脚本要具备以下功能: (1)      在/home/share/androidbuilds/目录中搜索以ot...

可生成verilog或VHDl的perl脚本

  • 2012年03月11日 00:08
  • 31KB
  • 下载

遇到的问题-----------perl脚本用handlersocket把数据插入mysql执行时报错lock_tables

对mysql用Handlersocket perk插入数据时 突然发生了lock_tables错误。 perl脚本中使用了多线程。 该脚本没有问题 之前使用得很好。  重启mysql后也无...

使用perl脚本计算排列组合

  • 2011年05月10日 12:01
  • 911B
  • 下载

linux下的perl脚本高级编程

  • 2008年10月07日 13:33
  • 847KB
  • 下载

批量从NCBI后台下载指定数据的Perl脚本

最近需要在NCBI中下载所有Xanthomonas属菌株对应的gbk文件,由于NCBI前台gbk数据已经改版,故打算从后台ftp.ncbi.nlm.nih.gov下载。写了个Perl脚本用于批量下载N...

MTK主要Perl脚本的介绍

  • 2008年05月23日 13:51
  • 5KB
  • 下载

VB运行perl脚本工具

  • 2008年09月04日 11:11
  • 18KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用perl脚本帮助编译多环境下的多个symbian工程
举报原因:
原因补充:

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