scons实践笔记(2)--带选项的编译

来源:互联网 发布:ios 沙盒存储数组 编辑:程序博客网 时间:2024/06/06 04:52


    (1)如果想要生成两个编译器版本的代码,比如在PC机上的GCC编译和ARM linux gcc交叉编译,并且在编译的时候可以选择,SConstruct内容如下,源代码测试文件还是前一个hello world程序:


> vim SConstructsrc = Glob('*.c') platform = ARGUMENTS.get('platform','pc')if platform == 'arm':    EXE_PATH = '/opt/arm-2007q1/bin'      PREFIX = 'arm-none-linux-gnueabi-'      ARMCC = PREFIX + 'gcc'      ARMAS = PREFIX + 'gcc'      ARMAR = PREFIX + 'ar'      ARMLINK = PREFIX + 'gcc'      ARMSIZE = PREFIX + 'size'      ARMOBJDUMP = PREFIX + 'objdump'      ARMOBJCPY = PREFIX + 'objcpy'      env = Environment (AS = ARMAS,                         CC = ARMCC,                         AR = ARMAR,                         LINK = ARMLINK)      env.PrependENVPath ('PATH',EXE_PATH)elif platform == 'pc':    env = Environment()  else:    passenv.Program(source = src, target = 'hello_world')

第二条语句指定了若platform缺省时为pc,故执行scons 与scons platform=pc效果一样。运行如下:

> lsmain.c  SConstruct> scons platform=armscons: Reading SConscript files ...scons: done reading SConscript files.scons: Building targets ...arm-none-linux-gnueabi-gcc -o main.o -c main.carm-none-linux-gnueabi-gcc -o hello_world main.oscons: done building targets.> scons platform=pcscons: Reading SConscript files ...scons: done reading SConscript files.scons: Building targets ...gcc -o main.o -c main.cgcc -o hello_world main.oscons: done building targets.> scons -cscons: Reading SConscript files ...scons: done reading SConscript files.scons: Cleaning targets ...Removed main.oRemoved hello_worldscons: done cleaning targets.> sconsscons: Reading SConscript files ...scons: done reading SConscript files.scons: Building targets ...gcc -o main.o -c main.cgcc -o hello_world main.oscons: done building targets.


(2)同样,这个方法还可以用来编译器生成不同版本的代码(如release版本和debug版本),如下:


> vim SConstructsrc = Glob('*.c') debug = ARGUMENTS.get('debug',0)vars = Variables(None,ARGUMENTS)vars.Add('debug','Set to 1 to build for debug', 0)env = Environment(variables = vars)Help(vars.GenerateHelpText(env))if int(debug) == 1:    env.Append( CCFLAGS = '-g')  env.Program(source = src, target = 'hello_world') > lsmain.c  SConstruct> scons debug=1scons: Reading SConscript files ...scons: done reading SConscript files.scons: Building targets ...gcc -o main.o -c -g main.cgcc -o hello_world main.oscons: done building targets.> scons debug=0scons: Reading SConscript files ...scons: done reading SConscript files.scons: Building targets ...gcc -o main.o -c main.cgcc -o hello_world main.oscons: done building targets. 

这样,便可控制debug版本和release版本的生成,另外SConstruct 脚本中第3、4、5、6句用来产生帮助信息,可以加上-h参数以运行使用:


> scons -hscons: Reading SConscript files ...scons: done reading SConscript files.debug: Set to 1 to build for debug    default: 0    actual: 0Use scons -H for help about command-line options.

这样便可提示用户使用命令。


(3)变量(如debug=1,platform=pc)还可以从文件中引入,详细在用户手册(10.2.3. Reading Build Variables From a File)一节,预编译定义也可由这种方法定义


原创粉丝点击