scons编译工具
1. sons介绍
sons是一种新的编译工具,是基于makefile的发展而来,使用python语言编写。SCons 是一个开放源代码、以 Python 语言编写的下一代的程序建造工具。它最初的名字是 ScCons, 基于由 perl 语言编写的 Cons 软件开发而成,它在 2000 年 8 月获得了由 Software Carpentry 举办的 SC 建造比赛的大奖。现在 ScCons 已经被改名为 SCons,目的是为了表示不再与 Software Carpentry 有联系,当然,还有一个目的,就是为了更方便的输入。
2. 安装和配置
- 登陆scons官网http://scons.org/,下载最新版的scons-2.5.1.tar.gz包。
- tar -zxf *.gz(解压文件)
- sudo python setup.py install
3. 使用scons
sons和makefile类似,可以编译多种源文件,不过它编译的脚本叫SConstruct。
ex:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
printf("Hello, world!\n");
return 0;
}
编译这个文件可以在原文件所在目录,新建SConstruct文件。编写内容如下
Program('hello.c')
这个时候会生成hello.o和hello的可执行文件。如果想更改编译的可执行文件名字可这样写
Program('test', 'hello.c')
如果编译的源文件有多个.c文件。可以这样写
Program('hello_world', ['test.c', 'test1.c', 'test2.c'])
如果文件太多.c的话,可以使用Glob函数。
Program('world', Glob("*.c"))
SCons 支持的编译类型有:
Program: 编译成可执行程序(在 Windows 平台上即是 exe 文件),这是最常用的一种编译类型。
Object: 只编译成目标文件。使用这种类型,编译结束后,只会产生目标文件。在 POSIX 系统中,目标
文件以 .o 结尾,在 Windows 平台上以 .OBJ 结尾。
Library: 编译成库文件。SCons 默认编译的库是指静态链接库。
StaticLibrary: 显示的编译成静态链接库,与上面的 Library 效果一样。
SharedLibrary: 在 POSIX 系统上编译动态链接库,在 Windows 平台上编译 DLL
例子
StaticLibrary('libstatic', ['test1.c','test2.c'])
Program('world', 'test.c', LIBS='libstatic', LIBPATH='.', CCFLAGS='-Den_print')
这个LIBS是指依赖的库的名字,LIBPATH指的是搜素库的路径。CCFLAGS是定义的编译参数。这个是定义了en_print这个宏,这个宏是可以传进源文件里面的。这个LIBS我做实验的时候用的动态库,一直提示有错误,使用静态库就可以了。不知道这个地方是不是有什么设置。
贴一下过程中写的源代码SConstruct
1 #Program('hello_world', ['test.c', 'test1.c', 'test2.c'])
2 #Program('world', Glob("*.c"))
3 #StaticLibrary('libstatic', ['test1.c','test2.c'])
4 #Program('world', 'test.c', LIBS='libstatic', LIBPATH='.', CCFLAGS='-Den_print=2')