`

使用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是一款开源的软件构建工具,它以Python编程语言为基础,旨在替代传统的Make工具,并集成了类似autoconf/automake的功能以及编译器缓存特性,如ccache。它的核心优势在于提供了一种更简单、更可靠且更快的构建...

    scons 2.4.0 用户指南

    - SConstruct文件是SCons项目的主要配置文件,类似于Makefile,但使用Python语法。 - SCons基于文件依赖性,自动跟踪源文件的改变,仅重建必要的目标文件,提高了构建效率。 2. **SCons的安装与配置**: - 安装...

    scons-2.3.1.tar.gz

    3. **Python语法**:SCons使用Python语法,使得构建脚本更易理解和维护,而Makefile的语法较为复杂,学习曲线较陡峭。 三、SCons在OpenWRT中的应用 OpenWRT是一个高度模块化的、小巧的Linux发行版,广泛应用于...

    scons脚本文档

    与Makefile不同,SCons不需要预定义的规则,而是通过读取源代码文件和配置文件自动推断构建过程。这使得SCons在处理复杂的依赖关系时更加灵活和高效。 二、SCons API SCons的API是其功能强大的关键所在。它提供了...

    scons-3.0.5.zip

    首先,SCons的设计理念是替代传统的Makefile系统,它旨在简化编译和构建过程,尤其是对于大型、多模块的项目。SCons基于Python,这意味着它拥有Python的灵活性和可读性,同时也能够利用Python的生态系统,如第三方库...

    scons安装包

    SCons是由Gordon McMillan在2001年创建的,旨在替代传统的Make工具,解决Makefile维护困难和跨平台支持不足的问题。SCons的核心设计理念是将构建过程视为一种软件工程任务,因此它使用Python语言来定义构建规则,这...

    scons-3.0.1.tar.gz

    SCons 使用 Python 编写,提供了一种替代传统的 Makefile 或其他构建工具的方式,它更易于使用,跨平台,并且对现代软件项目有更好的支持。 描述中提到 "linux 服务器 SVN 服务搭建所需环境",这表明 SCons 在此...

    scons-2.2.0.tar.gz

    3. **环境**:SCons的环境对象允许用户设置构建参数,如编译器路径、库位置等。这些环境可以被复制和修改,以适应不同平台或项目的需求。 4. **平台独立性**:SCons的一个主要优点是它的跨平台能力。通过适配器模块...

    jsoncpp与scons安装教程与资源.zip

    JsonCpp是一个C++库,用于处理JSON(JavaScript Object Notation)数据格式,而SCons则是一个构建自动化工具,替代传统的Makefile,提供更加灵活的构建流程。 JsonCpp库是用于解析和生成JSON格式数据的开源库,广泛...

    如何自动生成makefile

    3. **SCons**: SCons 是一个用Python编写的构建工具,它可以替代传统的 `Make`。SCons 通过读取 `SConstruct` 文件来定义构建过程,无需复杂的 `Makefile` 规则,支持多种平台和编译器。 4. **Meson**: Meson 是一...

    GNU Build Packages for SCons:使用SCons构建GNU工具-开源

    GNU Build Packages for SCons是一个创新的项目,它旨在利用SCons构建系统替代传统的GNU Autotools,用于构建软件。SCons是一个用Python编写的高级构建工具,它提供了一种更现代、更一致的方法来管理软件项目的构建...

    serf1.3.9和scons-3.0.1.tar.gz

    SCons是一个开源的构建工具,它是用Python编写的,替代了传统的Makefile系统。SCons提供了更加灵活和高效的构建过程,能够处理复杂的构建流程,跨平台支持也十分出色。在本例中,scons-3.0.1是serf安装的必备工具,...

    驾驭makefile

    7. **Makefile的扩展与替代**:随着项目规模的扩大,可能需要转向更复杂的构建系统,如CMake、SCons等,它们提供了更强大的功能和跨平台支持。 通过阅读《驾驭Makefile》这份资料,你将能够熟练掌握Makefile的编写...

    scons-4.2.0.tar.gz

    3. **示例和教程**:SCons可能提供了一些示例项目和教程,帮助新用户快速上手,理解如何配置和使用SCons进行项目构建。 4. **文档**:SCons的文档通常包括用户指南、API参考和开发者文档,这些文档可以帮助用户了解...

    Scons User Guide 2.01

    与makefile不同,SCons使用Python语言编写构建脚本,这使得脚本编写更为直观和灵活,同时具备了Python的全部功能,使其成为autoconfig和makefile的有效替代。 在构建和安装SCons的过程中,首先需要确保安装了Python...

    SCons 4.1.0 man page.pdf

    SCons使用一个基于Python的脚本配置文件,这使得其构建文件比传统的Makefile文件更简洁、更易于编写。SCons的设计宗旨是让构建过程更加可靠、更加可重复,同时提供更加丰富的功能和灵活性。 在SCons 4.1.0版本中,...

    Python库 | scons_parts-0.15.1-py3-none-any.whl

    SCons本身是一个用Python编写的、跨平台的软件构建工具,其设计目标是替代传统的Makefile系统,提供更高效、更易用的构建环境。在Python世界中,SCons因其强大的功能和对Python生态的良好支持而被广泛采用。 `scons...

    Hi3861_海思官方_第三方软件移植指南1

    SCons是一种开源的构建工具,替代传统的Makefile。在Hi3861平台上,SCons被用来管理软件构建过程。移植指南的1.2章节详细解释了如何使用SCons来配置和构建第三方软件,可能包括设置源代码路径、添加依赖项、定义...

    scons-4.1.0.post1.tar.gz---Ubuntu安装包

    SCons是一个开源的构建工具,它用于自动化软件构建过程,提供了一种替代传统Makefile的方法。在Linux系统,特别是Ubuntu上,SCons提供了更高效的构建和管理项目的方式。本文将详细介绍如何在Ubuntu上安装SCons 4.1.0...

    Python自动化构建工具scons使用入门笔记

    Scons是一种开放源代码的软件构建和安装工具,它使用Python语言编写,用于替代传统的Makefile构建系统。Scons主要的设计目标是提供一种更加方便、快捷且可扩展的方式来自动化编译和安装程序。 一、安装scons 安装...

Global site tag (gtag.js) - Google Analytics