scons 使用说明简介

scons是一个自动化编译软件,可以替代autoconf、automake系列工具。
官方网站:http://www.scons.org

使用scons时,需要编写一个SConstruct文件,这是是一个python脚本,根据此脚本,scons自动完成依赖关系的推导以及编译链接等过程。

以HelloWorld为例,我们有一最简单的源码文件hell.c
我们编写SConstruct内容如下:

# Arrange to build the "hello" program.
Program('hello.c') # "hello.c" is the source file.

然后在shell中输入:
scons回车

即可编译得到目标代码hello


同时编译多个目标,Sconstruct文件实例如下:
print "Calling Program('hello.c')"
Program('hello.c')
print "Calling Program('goodbye.c')"
Program('goodbye.c')
print "Finished calling Program()"
上述文件可以实现同时编译hello和goodbye两个目标。
和Makefile类似,Sconstruct文件中的各条语句并不是串行执行的,上述代码输出为:
%scons
scons: Reading SConscript. files ...
Calling Program('hello.c')
Calling Program('goodbye.c')
Finished calling Program()
scons: done reading SConscript. files.
scons: Building targets ...
cc -o goodbye.o -c goodbye.c
cc -o goodbye goodbye.o
cc -o hello.o -c hello.c
cc -o hello hello.o
scons: done building targets.


执行scons -Q可以减少编译时输出内容
执行scons -c相当于make clean

上面的代码中,输出目标文件名都是根据源文件名自动推导的,也可以手动指定输出文件名
Program('new_hello', 'hello.c')

对于依赖多个源文件的目标程序编译,实例如下:
Program('program', ['prog.c', 'file1.c', 'file2.c'])
其中,Program函数的第二个参数为一个指定源文件名的字符串数组,python里面数组用[]表示。
由于Sconstruc就是一个python脚本,所以对于文件列表参数可以进行数组的各种运算,如
common = ['file1.c', 'file2.c']
Program('program', 'prog.c'+common)
与上面等价


可以使用Glob函数配置符合指定命名规则的文件,如:
Program('program', Glob('*.c'))
可以匹配当前目录下所有c文件


编译库文件
静态库,将Program替换为Library或StaticLibrary即可,如:
Library('foo', ['f1.c', 'f2.o', 'f3.c', 'f4.o'])

StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])
动态苦,将Program替换为SharedLibrary即可,如:
SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])

如何指定链接参数
Program('prog.c', LIBS='foo', LIBPATH='.')

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值