`

使用scons替代makefile(3)

阅读更多

在上两篇文章中已经简单介绍了用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")

这种方式将环境和动作分开,更有条理一些。

分享到:
评论

相关推荐

    发掘Scons——替代Make的Python工具

    发掘Scons——替代Make的Python工具:Scons是用Python实现的一款跨平台的开源Build Tool,用Python实现意味着Scons比Make所使用的类Shell语言更贴近于自然语言,更易于理解和控制;用Python实现的另一个好处也是Make...

    scons用户手册(英文)

    scons类似于makefile,只是scons是python编写的,并且搭建scons比搭建makefile简单,其中python语言也很容易学习,不过这个文档没有详细的一个大型项目的搭建用例,请注意是英文版

    scons3.0.1 scons-design

    scons3.0.1 scons-design

    Scons使用手册

    SCons脚本编辑器,和Makefile相似。但是,新手学习比较快,简单易行!

    scons控制编译工程例子

    linux一般通过makefile控制编译。linux代码目录结构是 +scons_project_root 【src】 #源代码目录 [dir1] [dir2] [dir3] main.c 【target】 #目标输出目录 [include] [lib] [bin] 通过scons也实现...

    scons3.0.1 scons-man

    scons-manscons-man

    软件构建工具scons3源码

    scons有非常多相对于make构建系统的优秀特性,可是因为发展时间比較短如今的应用范围还是不太多,可以找到的资料也不是非常多。 scons如今一大问题就是初始上手还是有点难度的,对于有python的基础的还是有点问题,...

    python和scons安装

    python和scons安装包及安装截图说明,适合windows 64位系统。没找到分值设置位置,建议版主设置分数为1分

    scons用户手册

    scons用户手册,scons是一个编译工具,类似于Makefile,但是相对于Makefile ,它语法类似于Python,很方便。这个是官方的资料。

    scons 用户使用手册

    scons 用户使用手册

    scons2-2-0

    scons-2.2.0.rar使用工具

    scons-2.5.1.tar.gz

    scons

    scons使用设计手册

    scons使用设计手册

    Python库 | SCons-4.0.0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:SCons-4.0.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python2.6 scons1.3

    Python2.6 scons1.3

    scons-2.3.6 安装文件

    scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一类的...它是一种改进,并跨平台的gnu make替代工具,其集成功能类似于autoconf/automake 。scons是一个更简便,更可靠,更高效的编译软件。

    自动化编译工具scons简介

    自动化编译工具scons简介 自动化编译工具scons简介 自动化编译工具scons简介

    scons-3.0.5.zip

    scons-3.0.5.zip windows平台下的scons。1.本人用来mong编程生成库所使用的。2.其他功能不清楚3.搬运工免费

    scons-local-2.0.1

    scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一类的...它是一种改进,并跨平台的gnu make替代工具,其集成功能类似于autoconf/automake 。scons是一个更简便,更可靠,更高效的编译软件。

Global site tag (gtag.js) - Google Analytics