scons 是一个比较有意思的软件构建工具,其本意是想替代著名的autotools系列,我没有用过autotools,不过看到网上的 autotools使用教程就头晕,后来听说了scons,就仔细下载了它的文档看了一下,觉得很符合我的口味。scons与autotools和 cmake等工具不同的是,它并不是从一个类似工程配置的文件中生成Makefile,再调用make进行编译,而是直接控制编译器,从这个意义上来说, 它其实并不是替代autotools,而是make!下面是一个简单的例子,如果你想编译著名的hello.c文件:

#include

int main(){

printf("hello,world\n");

return 0;

}

只需在hello.c的当前目录下建立一个叫SConstruct的文件:

Program('hello,'hello.c')

然后运行scons就可以了,scons会自动调用gcc(不是make)来编译生成可执行程序hello。如果hello.c中引用了foo.h这个头文件,而foo.h声明的函数定义在foo.c,则SConstrut可以写成:

Program('hello',['hello.c','foo.c'])

Program的第一个参数是目标,后面可以是单个源文件名或源文件名数组。注意,scons是很智能的,它知道hello.c依赖于 foo.h,所以当foo.h发生改变时,就会重新编译hello.c。这个依赖关系不需要我们额外写代码。如果源文件太多了,全写在那个数组里太长了, 而源文件都是在同一个目录以.c为后辍时,我们可以简写如下:

Program('hello',Glob("*.c"))

如果程序引入了其它的库,库名为libbar.a,库的目录为/usr/local/lib:

Program('hello',Glob("*.c"),LIBS='bar',LIBPATH='/usr/local/lib')

如果使用了pkg-config来管理库,可以用环境(Enviroment)如下,例如我使用了GTK+ 2.0:

env=Enviroment()

env.ParseConfig("pkg-config --libs --cflags gtk+-2.0")

env.Program('hello',Glob("*.c"))

scons除了可以编译C/C++程序以外,它还可以编译LaTeX,如

DVI('paper.dvi','paper.tex')

就可以用latex命令来编译paper.dvi文件,scons还可以编译Java等其它类型的程序,具体内容见scons的官方文档。

scons本身有一些设计得很好的地方,SConstruct的本身是一个合法的Python程序,它并没有像c,make那样使用自有的配置文件格式, 可以使用所有Python的实用库来完成更高级的运用。还有它判断文件更改是默认情况下不是根据时间戳,而是MD5码!所以上面foo.h被touch 了,并不会导致重新编译。scons的缺点是其效率太低,速度太慢。

linux内核使用scons构建,使用scons软件构建工具相关推荐

  1. 【错误记录】Ubuntu 安装 Linux 内核后需要重新安装 VMware Tools 软件进行兼容操作

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 [Linux 内核]编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 ) 博客中 , 安装完 Li ...

  2. Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

    摘要:二进制SCA工具要想更好的辅助安全人员实现安全审计.降低漏洞检测的误报率,必须向更细颗粒度的检测维度发展,而不仅仅停留在开源软件的层面,同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战. ...

  3. Linux内核性能剖析的方法学和主要工具

    计算机科学的先驱Donald Knuth(高德纳)曾经说过:"过早的优化是万恶之源",更详细的原文如下:"We should forget about small eff ...

  4. Linux内核级木马与病毒攻防:基础工具介绍

    欲成其事先利其器.要想完成一项复杂的任务,工具的作用至关重要.要想在Linux系统上开发或研究木马病毒等特殊程序,我们需要使用一系列强大的开发和调试攻击.本节先介绍几种在Linux系统上极为强大的工具 ...

  5. 如何在Ubuntu/CentOS上安装Linux内核4.0

    如何在Ubuntu/CentOS上安装Linux内核4.0 大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为'Hurr durr I'm a sheep'的 ...

  6. 两个月新增 80万行代码,Linux 内核维护为什么不会崩?

    8 月初,当 Linux 5.8 RC 版本开放测试时,大多数的新闻都聚焦于它的大小,称其为"史上最大的内核版本".正如 Linus Torvalds 本人指出的那样," ...

  7. 谷歌强推 Rust 进驻 Linux 内核,与主要开发者签订合同!

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 上个月底谷歌的"三儿子" Fuchsia OS 正式推出,一时众人的目光皆为其吸引. 其实自 2016 年 Fuch ...

  8. 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统

    虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备. 虚拟文件系统本身是linux内核的一部分,是纯软件 ...

  9. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. --1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. - ...

  10. 故意向Linux内核提交漏洞被全线拉黑?华人教授行为引众怒

    作者 | 褚杏娟 "即使你可以提供证据证明那些补丁是有效的,但为什么事实上我们却是在浪费时间做额外的工作?" Linus Torvalds 应该要气炸了. 近日,Linux 内核稳 ...

最新文章

  1. 面试题:mysql 一棵 B+ 树能存多少条数据?
  2. 用coffee和socket.io实现的01背包算法
  3. 30道经典SQL面试题讲解(1-10)
  4. windows系统上使用openssh client连接远程Linux服务器的日志分析
  5. javascript简单介绍
  6. 内连接,外链接(左连接、右连接、全连接),交叉连接大总结
  7. 沉淀一年零八个月,我也拿到了博客专家
  8. Object-c 总结之NSArray
  9. linux源码acl,Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍...
  10. mysql查询的是问号_MySQL客户端查询中文显示为问号(linux) | 学步园
  11. JMeter(五)--检查点
  12. 现在维吾尔语在计算机中发展,维吾尔语手写体在线计算机识别技术研究.doc
  13. idea怎么调试jsp页面_JSP+Servlet+C3P0+Mysql实现的YCU movies电影网站
  14. 视觉定位VBL 视觉里程计VO 视觉SLAM 区别与联系
  15. Python怎么安装jieba库?
  16. Neokylin7安装DM8数据库
  17. 汉庭加盟:连锁酒店影视房的市场分析
  18. 如何使用ERD设计关系数据库?
  19. Mac 新手必看:认识 Mac 桌面
  20. 阴阳师2017 7服务器维护,《阴阳师》手游4月17日维护更新公告

热门文章

  1. 【Docker】error pulling image configuration: download failed after attempts=6: dial tc
  2. Agora Flat:在线教室的开源初体验
  3. Skleran-线性模型-最小角回归(LARS)
  4. Android端记录跑步运动轨迹数据的App
  5. tex模版wins版本在mac中字体不对应问题解决方案
  6. linux su -c 命令
  7. Cantor(有理数)
  8. 数学计算机 分数乘法,分数乘法的计算方法
  9. ​2019胡润百富榜公布:中国互联网上演: 龙虎斗 , 阿里暂时领跑 , 企鹅紧随其后 , 李彦宏,雷军掉队...
  10. numpy——arry矩阵交换行或者交换列