linux scons 实用说明(一)-g选项
2016-04-13 22:48
288 查看
原文链接:http://blog.csdn.net/fly542/article/details/38342003
还在为写一个makefile发愁吗?还在为难记的make参数而苦恼吗?有了scons一切都边的简单了。最近研究了下scons,发现和makefile相比,soncs编译c和c++程序真的太方便了。搞程序什么做好,当然是简单实用最好下面大家就一起感受下简单的scons吧。
1、使用scons编译程序
在程序目录下执行命令如下:(前提是你已经安装scons了哟)
scons
噢,噢,这个好像没啥简单的哈,和make差不多嘛。是吗?那就继续瞧好吧您
2、清空编译程序
在程序目录下执行命令如下
scons -c
这个嘛,,没什么吧,和make clean也没简单多少呀,不就少了几个字母吗,是吗?那咱还继续吧
3、将cpp或c文件编译为执行文件
在源文件目录中创建一个SConstruct的文件,并在其中添加如下内容
Program('testPro1', Glob('*.cpp'))
保存后执行1中的scons命令
这就完事了??是的!这就完事了,只要你程序的语法没错,应该会生成一个名字叫testPro1的程序,如果在window下会生成一个testPro1.exe的程序哟,有没有很酷?
将cpp或c文件编译为执行文件有如下2中方式
方式1:
Program('程序名',
Split('程序文件序列 空格分隔'))
方式2:
Program('程序名', Glob('*.cpp'))
4、编译的时候想添加上-g -O2 -Wall参数
使用环境变量
env=Environment(CCFLAGS
= ['-g','-O3','-Wall'])
生成程序的时候使用env.Program(。。。。)即可
例如:
env=Environment(CCFLAGS = ['-g','-O3','-Wall'])
env.Program('程序名', Glob('*.cpp'))
5、编译生成静态库
方法1:使用Library关键字
Library('库名', Split('程序文件序列,空格分隔')
或
Library('库名', Glob('*.cpp'))
方法2:使用显示关键字StaticLibrary
StaticLibrary('库名', Split('程序文件序列,空格分隔'))
或
StaticLibrary('库名', Glob('*.cpp'))
说明:库名不要前面的lib和后缀,如库libtestdota.a生成时的库名为testdota
6、编译生成动态库
使用关键字SharedLibrary
SharedLibrary('库名', Split('程序文件序列,空格分隔'))
或
SharedLibrary('库名', Glob('*.cpp'))
说明:库名不要前面的lib和后缀,如库libtestso.so生成时的库名为testso
7、程序或库中引用已有的库
使用关键字LIBS和LIBPATH
LIBS后跟程序需要引用的库名
LIBPATH后跟程序引用库的时候所需的库文件路径
如:
Program('testPro','prog.c',
LIBS = ['m','m2'], LIBPATH = ['/usr/lib', '/usr/local/lib'])
生成的testPro程序要引用库libm.so和libm2.so,库文件路径在/usr/lib和/usr/local/lib下
8、指定程序编译过程中需要查找的头文件路径
使用关键字CPPPATH
例如:
Program('hello','hello.c',
CPPPATH = ['include', '/home/project/inc'])
生成hello程序的时候hello.c可能引用了其他的头文件,在编译hello.c的时候会查找./include和/home/project/inc下是否有需要的头文件
到此一些常用的makefile的功能基本都有了,有没有觉得很简单那
,后面会继续写一些实用的相对复杂一些的功能,希望大家能够喜欢!
还在为写一个makefile发愁吗?还在为难记的make参数而苦恼吗?有了scons一切都边的简单了。最近研究了下scons,发现和makefile相比,soncs编译c和c++程序真的太方便了。搞程序什么做好,当然是简单实用最好下面大家就一起感受下简单的scons吧。
1、使用scons编译程序
在程序目录下执行命令如下:(前提是你已经安装scons了哟)
scons
噢,噢,这个好像没啥简单的哈,和make差不多嘛。是吗?那就继续瞧好吧您
2、清空编译程序
在程序目录下执行命令如下
scons -c
这个嘛,,没什么吧,和make clean也没简单多少呀,不就少了几个字母吗,是吗?那咱还继续吧
3、将cpp或c文件编译为执行文件
在源文件目录中创建一个SConstruct的文件,并在其中添加如下内容
Program('testPro1', Glob('*.cpp'))
保存后执行1中的scons命令
这就完事了??是的!这就完事了,只要你程序的语法没错,应该会生成一个名字叫testPro1的程序,如果在window下会生成一个testPro1.exe的程序哟,有没有很酷?
将cpp或c文件编译为执行文件有如下2中方式
方式1:
Program('程序名',
Split('程序文件序列 空格分隔'))
方式2:
Program('程序名', Glob('*.cpp'))
4、编译的时候想添加上-g -O2 -Wall参数
使用环境变量
env=Environment(CCFLAGS
= ['-g','-O3','-Wall'])
生成程序的时候使用env.Program(。。。。)即可
例如:
env=Environment(CCFLAGS = ['-g','-O3','-Wall'])
env.Program('程序名', Glob('*.cpp'))
5、编译生成静态库
方法1:使用Library关键字
Library('库名', Split('程序文件序列,空格分隔')
或
Library('库名', Glob('*.cpp'))
方法2:使用显示关键字StaticLibrary
StaticLibrary('库名', Split('程序文件序列,空格分隔'))
或
StaticLibrary('库名', Glob('*.cpp'))
说明:库名不要前面的lib和后缀,如库libtestdota.a生成时的库名为testdota
6、编译生成动态库
使用关键字SharedLibrary
SharedLibrary('库名', Split('程序文件序列,空格分隔'))
或
SharedLibrary('库名', Glob('*.cpp'))
说明:库名不要前面的lib和后缀,如库libtestso.so生成时的库名为testso
7、程序或库中引用已有的库
使用关键字LIBS和LIBPATH
LIBS后跟程序需要引用的库名
LIBPATH后跟程序引用库的时候所需的库文件路径
如:
Program('testPro','prog.c',
LIBS = ['m','m2'], LIBPATH = ['/usr/lib', '/usr/local/lib'])
生成的testPro程序要引用库libm.so和libm2.so,库文件路径在/usr/lib和/usr/local/lib下
8、指定程序编译过程中需要查找的头文件路径
使用关键字CPPPATH
例如:
Program('hello','hello.c',
CPPPATH = ['include', '/home/project/inc'])
生成hello程序的时候hello.c可能引用了其他的头文件,在编译hello.c的时候会查找./include和/home/project/inc下是否有需要的头文件
到此一些常用的makefile的功能基本都有了,有没有觉得很简单那
,后面会继续写一些实用的相对复杂一些的功能,希望大家能够喜欢!
相关文章推荐
- linux线程
- Linux 学习记录
- Centos 7 DNS配置及理论详解
- 常用Linux命令:mount/umount/blkid
- PCL使用常见问题 及安装pcl1.8.0 vs2013 及linux下
- The Linux Storage Stack Diagram 内核 4.0 版的 I/O 栈
- linux及安全《Linux内核设计与实现》第三章——20135227黄晓妍
- 《linux高性能服务器编程》学习笔记(二)之拥塞控制
- Linux入门学习(九)
- linux及安全第八周总结——20135227黄晓妍
- Linux学习笔记知识点(一)
- linux 常用命令adb
- linux内核调试技巧之一 dump_stack
- VMware虚拟linux系统时与主机共享文件夹
- 每天进步一点点——Linux下的磁盘缓存
- ubuntu15.10 3D桌面
- LINUX内核分析第八周学习总结:进程的切换和系统的一般执行过程
- Linux内核设计与实现 第四章
- LINUX+Vmware+SVN的配置和安装
- 《Linux内核分析》第八周:进程的切换和系统的一般执行过程