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)一节,预编译定义也可由这种方法定义
- scons实践笔记(2)--带选项的编译
- scons 实践笔记(3)--模块编译
- scons实践笔记(1)--hello world
- scons 编译带openssl 的mongodb cxx driver legacy 的问题
- sbl1编译(Scons部分)
- [SCons 有点翻译的scons学习] 1. 简单编译
- [SCons 有点翻译的scons学习] 2. 简化编译过程
- scons编译
- scons 编译
- Go编译选项(笔记)
- SCons笔记
- scons笔记
- scons介绍和blender的编译
- RT-Thread 学习笔记(三)---用SCons 构建编译环境
- 解决泛泰A850L编译CM10.2(android4.3)自带相机没有1300w分辨率选项的方法
- linux scons 实用说明(一)-g选项
- C++ Primer学习笔记-转载荣耀先生写的CL编译选项
- C++ Primer学习笔记-转载荣耀先生写的CL编译选项
- js实现user增删改查
- Struts1.x NoSuchMethodException的一种可能
- 深入理解计算机系统第五章--编写高效程序
- UVA 11374 Airport Express
- jQuery介绍入门和对象转换,选择器
- scons实践笔记(2)--带选项的编译
- JDBC连接数据库大全
- COM笔记-接口
- jQuery的Dom操作
- Spring的配置文件
- oracle存储过程、函数、PL/SQL块、动态游标
- windows phone:通过XmlSerializer读写XML文件
- 向Xcode增加多个iPhone Simulator
- 第三次作业,做业五