使用scons替代makefile(3)

【SCons】SCons编译软件工程(一) SCons是一种用Python实现的软件构建工具,类似与Makefile,它可以自动编译源代码或者代码工程并构建输出可执行文件,除了能对C代码,C++代码以及汇编代码进行构建外,还可以对Fortran,Java等编程语言进行构建;它帮助开发者管理复杂的软件代码工程通过一种灵活的、可扩展的构建系统;所以可以将SCons看作是经典Make实用程序进一步改进后的替代品,SCons是一个更简便、更可靠、更高效的编译软件;由于Python语言编写的开源构建系统,所以具备很强的跨平台特性; 阅读详情

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

告别Makefile的晦涩:用Python写构建脚本,Scons保姆级入门(附多文件编译实战) 本文详细介绍了如何利用Scons这一基于Python的构建工具替代传统的Makefile,提供从环境搭建到多文件项目构建的保姆级教程。通过对比Scons与Makefile的语法清晰度、自动依赖分析等核心优势,帮助开发者高效管理复杂项目构建流程,特别适合需要跨平台支持的中大型项目。 阅读详情

相关推荐

三模冗余设计

在数字电路设计中,Voter模块(表决器) 和 三模冗余(Triple Modular Redundancy, TMR) 是高可靠性系统的核心设计技术,主要用于容错和抗辐射(如航天、医疗设备等关键领域)。容错机制:若任一模块故障(如SEU,单粒子翻转),其他两个模块仍能保证正确输出。功耗与面积:TMR会显著增加资源占用(约3倍),需权衡可靠性和成本。航天电子:抗辐射芯片(如FPGA)中用于防止单粒子翻转(SEU)。故障检测:可扩展设计以检测并隔离故障模块(如通过BIST)。

qq_45776815的博客 2055

Makefile 和scons转换快速参考

Makefile和scons快速转换makefile是传统C/C++开发项目中最常用的工程管理工具,而现在随着python的日益流行,基于python的代码编译工具scons使用越来越广泛。在一些比较大项目中,可能需要把makefile转换成scons,或者反过来把基于scons转换成makefile,本文结合了笔者碰到的一些项目,总结了一些常用的模式在两种不同工具中的实现。...

weixin_34384915的博客 895

Petalinux-2018.3添加内核驱动(linux-xlnx源码打补丁)

大部分模块可以直接使用,需要添加自己的驱动文件时,可以通过linux-xlnx源码打补丁方式和使用PetaLinux编译为.ko文件加载运行,本文章介绍通过linux-xlnx源码打补丁方式添加内核驱动文件。根据查找资料,了解到可以通过打补丁方式添加到工程文件中。. /opt/tool-pkg/petalinux/2018.3/components/yocto/source/arm/layers/core/oe-init-build-env (该执行文件在Petalinux软件安装路径下)

sanyuedtaifen的博客 1554

【c++】Scons|scons对比make

Sconsmake如果只有少数几个文件修改过,make 工具知道仅仅需要对哪些文件重新编译,缩短编译的时间。虽然如此,但是 make 规则复杂,即使是有经验的开发者也望而生畏。Scons是它的同类产品,也可以说是升级产品。做的事情跟make一样,但更简单,更容易。SconsScons是一个开放源码、以Python语言编码的自动化构建工具,可用来替代make编写复杂的makefile。并且scons是跨平台的,只要scons脚本写的好,可以在Linux和Windows下随意编译。.........

我的笔记本 6207

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍

目录Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍一、简单介绍二、Mask 实现的遮罩效果三、Soft Mask 实现遮罩效果四、 Soft Mask 的一些设置五、插件下载Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

仙魁XAN 8575

李航《统计学习方法》课后习题答案(第2版)

李航《统计学习方法》课后习题答案(第2版) 章节 链接 第1章 统计学习及监督学习概论 点击进入 第2章 感知机 点击进入 第3章 k近邻法 点击进入 第4章 朴素贝叶斯法 点击进入 第5章 决策树 点击进入 第6章 逻辑斯谛回归与最大熵 点击进入 第7章 支持向量机 点击进入 第8章 提升方法 点击进入 第9章 EM算法及其推广 点击进入 第10章 隐马尔可夫模型 点击进入 第11章 条件随机场 点击进入     也可进入我的个人主页查看分类专栏

weixin_43646592的博客 2万+

scons入门(二)

判断是否需要重新编译 SCons很智能,只会编译需要编译的内容。比如我刚执行完scons,再次执行,则会提示scons: . is up to date.。 那么他是如何做到的呢?也不复杂,依赖一个Decider的方法,以及一个.sconsign.dblite文件。 默认情况下,如果文件的md5值改变了,才会重新编译。每次编译,SCons都会把md5存起来,再次执行时,如果md5没变,则不需要rebuild。 如果我们不希望使用md5,而是使用文件修改时间呢?很简单,增加Decider('timest

danshiming的博客 1055

HBase骚操作之数据加载方式BulkLoad

本文研究了一种HBase BulkLoad的入库方式,该方式利用HBase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。该方式配合MapReduce完成,高效便捷,而且不占用Region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对Hbase节点的写入压力。HBase BulkLoad对于异构数据源的合并及大量数据一次性导入具有重要指导意义,相比HBase Put操作在性能上具有较高的优势

石榴姐yyds 7789

Scons编译工具入门

env.Append(CPPDEFINES=['BIG_ENDIAN']) #预处理定义env.Append(CPPDEFINES={'RELEASE_BUILD' :'1'}) #包含预处理值定义。

至绽至强的博客 1567

[DDR5]DDR5 SDRAM 状态图 和 基本功能

DDR5 SDRAM的读写操作以突发(burst mode)为导向,从选定的位置开始,并按照编程顺序进行16个突发长度或8个“切片”突发长度的操作。从ACTIVATE命令开始,然后是读取或写入命令。

串起点滴 1201

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 372

rtthread_scons简介

env工具基本构成 命令行环境Cmder: Cmder是一款免费的DOS系统仿真器,体积小巧,界面清爽,支持多标签操作,兼容dos原有的指令。 系统配置工具menuconfig: 即linux menuconfig的python实现版本,使用方法与linux menuconfig基本一致。遵循兼容LINUX的Kconfig语法,用户可以方便的沿用以前的kconfig配置文件对代码进行宏管理。 开源软件scons: scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一

weixin_51554391的博客 4164

PCB层叠结构与阻抗计算

1.Core 和 PP PCB两个重要组成部分:Core 和 Prepreg(半固态片,简称PP)。 如下图所示, Core 的两个表面都铺有铜箔,可作为信号层、电源层、地层等导电层,Core的上下表面之间填充的是固态材料; PP的表面不铺铜,在PCB中起填充作用,其材质是半固体的树脂材料,因此比Core略软一些。 在制作多层板时,需配合使用Core和PP,一般在两个Core 之间应选PP作为填...

sinat_15677011的博客 1万+

linux scons ld_run_path,使用scons替代makefile(3)

在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序的方法,本篇中将主要介绍scons的其他一些常用参数以及变量。scons不带参数执行的时候会执行编译动作,对于内容改变过的源文件它会自动重新编译,scons对文件状态的改变靠的是内容的md5而不是时间戳,这是scons和makefile不同的一点。它对文件信息和状态的记录保存在当前目录下的.sconsign.dblite文件中。scon...

weixin_28717431的博客 360

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用 SCons 代替 Makefile 快速构建应用程序

使用 SCons 代替 Makefile 快速构建应用程序作者:柳大·Poechant博客:blog.youkuaiyun.com/Poechant邮箱:zhongchao.ustc@gmail.comCopyright © 柳大·Poechant0 Introduction为 make 工具编写建造规则不是一件容易的事。它复杂的配置规则,即使是有经验的开发者也望而生畏。make 工具的许多替代品便因此而诞生

麦克船长的技术笔记 6172

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RT-Thread SCons构建工具 全面详解 对比cmake 强过Makefile

笔者首先对于scons这个工具的引入是在学习cmake的时候有所听闻,并在真正学习RT架构的时候由于RTthread的迭代之后就不用Make/Makefile ,RT-Thread 早期使用 Make/Makefile 构建。从 RT-Thread 0.3.0 开始,RT-Thread 开发团队逐渐引入了 SCons 构建系统,引入 SCons 唯一的目是:使大家从复杂的 Makefile 配置、IDE 配置中脱离出来,把精力集中在 RT-Thread 功能开发上。

你要拥有一个你喜欢并且热爱的人生 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

使用scons替代makefile(1)

早在多年前我刚开始接触linux下的C程序时,经常被makefile搞得焦头烂额,尤其当项目大了,子目录多了之后显得尤其不方便。后来开始学会使用开源程序的普遍做法,那就是使用automake/autoconf。时间长了仍然觉得很ugly,目录下总是一堆中间文件,显得好臃肿。去年开始我开始全面使用scons,它是一个对makefile的全面替代。scons由python编写,受到Raymond的大力推荐,scons的官方网站上就有Raymond对scons的评价“It was long past time f

Falcon2000的专栏 1489

linux内核使用scons构建,使用scons替代makefile(2)

本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态库和动态库的编译在scons里编译库文件和编译可执行程序非常类似,只是采用的指令有所不同。对于静态库,采用如下指令Library(”libdemo”,["a.c","b.c"])或者StaticLibrary(”libdemo”,["a.c","b.c"])对于动态库,采用如下指令SharedLibrary(”libdemo”,["a....

weixin_33576058的博客 361

Scons入门简介

Scons是什么 make 在Linux系统上做过c/c++开发的同学们都知道一个项目工程管理工具:make和Makefile。 make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。 通过检查文件的修改时间,make 工具可以知道编译目标文件所要依赖的其他文件。在复杂的项目中,如果只有少数几个文件修改过,make...

guotianqing的博客 5万+

scons使用

scons入门

CarryMee的博客 536

SCons

SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。

l00102795的博客 903

SCons 构建工具

SCons 简介 SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。 在SCons的网站上可以找到详细的 SCons 用户手..

liuyuanbin9001 9905

使用scons替代makefile(2)

<br /><br />本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态库和动态库的编译<br />在scons里编译库文件和编译可执行程序非常类似,只是采用的指令有所不同。<br />对于静态库,采用如下指令<br />Library(”libdemo”,["a.c","b.c"])或者StaticLibrary(”libdemo”,["a.c","b.c"])<br />对于动态库,采用如下指令<br />SharedLibrary(”libdemo”,["a.c","b.c"])<br

Falcon2000的专栏 1289

SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具

http://scons.org/ https://www.ibm.com/developerworks/cn/linux/l-cn-scons/index.html 后附:另外,WAF是一个基于scons的构建工具,而且是 Re-design of scons to improve its worst features。 在软件项目开发过程中,make 工具通常被用来...

dielucui7698的博客 439
上一篇: 使用scons替代makefile(2)
下一篇: 善用backtrace解决大问题
Falcon2000
博客等级 码龄26年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值