使用scons替代makefile(3)

本文介绍了 SCons 的基本用法及常见参数配置,包括如何使用 -c 和 -Q 参数,以及如何设置 LIBS、LIBPATH、CPPPATH 和 CPPDEFINES 等变量来定制编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序的方法,本篇中将主要介绍scons的其他一些常用参数以及变量。

scons不带参数执行的时候会执行编译动作,对于内容改变过的源文件它会自动重新编译,scons对文件状态的改变靠的是内容的md5而不是时间戳,这是scons和makefile不同的一点。它对文件信息和状态的记录保存在当前目录下的.sconsign.dblite文件中。

scons最常用的参数有两个,-c和-Q。

scons -c可以清除生成的临时文件和目标文件,相当于执行make clean。

scons -Q将产生更少的输出信息。

在编译和链接的过程中经常会附加一些参数,例如定义头文件包含路径,链接库的路径或者宏定义等,这些参数当然都是可以定制的,常用的变量有如下一些:

LIBS:指定链接的库文件,比如要链接 libpthread.so,则写为 LIBS=['pthread']

LIBPATH:库文件搜索路径,例如 LIBPATH=['/usr/local/lib/','.']

CPPPATH:include文件包含路径,例如CPPPATH = ['/home/project/inc']

CPPDEFINES:宏定义,例如CPPDEFINES=’DEBUG’

CC:编译器,默认情况下scons会根据源文件后缀自动判断。

CFLAGS:编译参数,例如CFLAGS = ‘-g -W’

LDFLAG:链接参数,例如LDFLAG = ‘-g’

可以看到,上述变量的值可以为字符串’-g’。当指定多个值时候,采用python中的list类型。

这些变量的使用地点很灵活,一般可以在两个地方使用。

第一种,直接使用在Program,Library等指令中,例如

Program("demo","main.c",CC='gcc',CFLAGS=['-g','-W'],CPPDEFINES=['DEBUG','OK'],CPPPATH='/usr/local/include',LIBS=["demo"],LIBPATH=["."]);

执行scons -Q后的输出如下

[leconte@localhost demolib]$ scons -Q
gcc -o a.os -c -fPIC a.c
gcc -o b.os -c -fPIC b.c
gcc -o main.o -c -g -W -DDEBUG -DOK -I/usr/local/include main.c
gcc -o libdemo.so -shared a.os b.os
gcc -o demo main.o -L. -ldemo

可以看到我们定义的宏都起作用了。

另外一种方式,也是实际项目中会用到的方法,则是预先用Environment设置编译环境

env = Environment(CC = 'gcc', CFLAGS = ['-g','-W'], CPPDEFINES=['DEBUG','OK'],CPPPATH='/usr/local/include',LIBS=["demo"],     LIBPATH=["."])
env.Program("demo","main.c")

 

源文档 <http://hi.baidu.com/jrckkyy/blog/item/18de9497f2bbaa7d54fb962e.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值