还在为写一个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的功能基本都有了,有没有觉得很简单那,后面会继续写一些实用的相对复杂一些的功能,希望大家能够喜欢!

更多相关文章

  1. 如何查找特定用户可执行的所有文件(不是最新的)
  2. iptables:传统的Linux防火墙管理程序
  3. linux socket 程序被ctrl+c或者异常终止,再次起程序时提示该端口
  4. 使用/proc/meminfo文件查看内存状态信息
  5. linux下socket通信常用的结构与头文件
  6. ldconfig报错 :libstdc++.so.6.0.18-gdb.py不是一个elf文件
  7. 有什么办法可以在Windows上不用使用太繁琐的办法从Linux服务器上
  8. linux下touch命令也可以一次创建多个文件和mkdir一次创建多个文
  9. Linux实用程序编写了一个matlab .mat文件

随机推荐

  1. java应届生面试考点收集
  2. Eclipse创建的包变成文件夹的解决方法
  3. 关于一个简单的策略设计模式的例子
  4. 我应该使用DataInputStream还是BufferedI
  5. 教你如何秒杀12306,JAVA程序抢票成功!----
  6. 如何更改webservice url端点?
  7. Linux下java/bin目录下的命令集合
  8. 派生类具有基类私有成员
  9. java中final关键字详解
  10. java 对称加密——密钥与加密后的数据存