SCons构建工具使用
scons是一个Python写的自动化构建工具,和GNU make相比优点明显:
1、 移植性:python能运行的地方,就能运行scons
2、 扩展性:理论上scons只是提供了python的类,scons使用者可以在这个类的基础上做所有python能做的事情。比如想把一个已经使用了Makefile大型工程切换到scons,就可以保留原来的Makefile,并用python解析Makefile中的编译选项、源/目标文件等,作为参数传递给scons,完成编译。
3、 智能:Scons继承了autoconf/automake的功能,自动解析系统的include路径、typedef等;“以全局的观点来看所有的依赖关系”
SCons的设计原则
正确,这一点从使用MD5作为文件更新检查算法就可见一斑。要知道make使用的是时间戳,在没有ntp服务器的情况下,很容易出现因本地时间与服务器不同步而导致的不正常build。
高效,只能说在满足正确的前提下做到高效,毕竟python在性能上还是无法和make相比的,当然前者可以做的事情也更多。
方便,因为已经设定了一些默认的基本的原则,所以只需要编写很少的代码就可以完成一个项目的build。这一点比make是要好。当然做一个通用的makefile模板也不是什么难事。
1.安装SCons
因为SCons基于python,所以首先要安装python,本人安装的是官方推荐的python 2.5.1。SCons可以在多种OS上运行,windows的版本可以在http://www.scons.org/download.php找到。
2.hello world
用C写一个hello world, 如下
int main()
{
printf("Hello, world!\n");
}
保存文件名为hello.c,想要用scons来build这个文件,只需要,
a.在同一目录下,建立一个名为SConstruct的文件
b.在该文件中加入一行,
Program('hello.c')
如果只是想compile objects,不做link,可以改为,
Object('hello.c')
c.在当前目录下执行scons
% scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
cc -o hello.o -c hello.c
cc -o hello hello.o
scons: done building targets.
3.make clean
makefile的忠实用户一般都会在makefile中加入clean,作用是删除已经产生的objects,可执行文件等,scons已经内置该功能,不需要额外添加代码,执行scons –c。
% scons -c
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Cleaning targets ...
Removed hello.o
Removed hello
scons: done cleaning targets.
4. SConstruct和makefile
SConstruct和makefile有着本质的不同,但又有着惊人的相似之处。不同的是SConstruct是一个典型的python脚本,具有一切python脚本的特性;相似的是,和makefile一样都是declarative型(非imperative型)脚本,也就是说Program, Object这些定义并不立即触发编译动作。
5. build多个文件
Program(['prog.c', 'file1.c', 'file2.c'])
指定目标文件的名字为myprog,
Program('myprog', ['prog.c', 'file1.c', 'file2.c'])
注意编译多个文件和指定目标文件可能会有语义上的歧义,因此使用文件列表时要用中括号。
下面列出一些常用的例子方便以后使用。
| 编译每个.c文件为单独的程序 | src=Split(""" foo.c bar.c """) for x in src: Program(x) |
| 编译所有的.c文件为一个程序 | Program('program', Glob('*.c')) |
| 使用环境变量 |
env = Environment(LINKFLAGS='-pthread -lm')
env = Environment(CCFLAGS='-g',LINKFLAGS='-pthread -lm')
env.Program("foo.c")
|
| 编译MPI程序 |
import os
env = Environment(CC = '/opt/mpich2/bin/mpicc') env.Program("alltoallv.c")
|
参考资料:
1. 用户手册,http://www.scons.org/doc/production/HTML/scons-user/index.html
参考:http://andylin02.iteye.com/blog/849665
SCons构建工具使用的更多相关文章
- linux自动化构建工具-scons指南
1.scons是linux下的自动构建工具 scons是用Python编写的,使用scons之前需确认是否已经安装了Python.(在系统的命令行中运行python -V或python --versi ...
- SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
http://scons.org/ https://www.ibm.com/developerworks/cn/linux/l-cn-scons/index.html 后附:另外,WAF是一个基于sc ...
- 去除scons构建动态库的前缀lib
如何使用scons构建工程,请参考快速构建C++项目工具Scons,结合Editplus搭建开发环境. 编译SharedLibrary项目的时候,生产的so文件时自动加上lib, 例如: env = ...
- Google软件构建工具Bazel原理及使用方法介绍
近期,Google开源了强大的自动化构建工具Bazel. 正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理 ...
- Gulp:自动化构建工具
一.介绍: gulp是一个基于流的构建工具,可以自动执行指定的任务,简洁且高效 二.优点: 开发环境下,想要能够按模块组织代码,监听实时变化 css/js预编译,postcss等方案,浏览器前缀自动补 ...
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
- 前端构建工具之gulp_常用插件
gulp常用插件的使用 今天来看看一下gulp的常用插件的使用 就像gruntjs需要一个Gruntfile.js文件一样,gulp也需要一个文件作为它的主文件,在gulp中这个文件叫做gulpfil ...
- 前端构建工具的用法—grunt、gulp、browserify、webpack
随着前端项目的飞速发展,项目越来越大.文件越来越多,前端工程化的工具也越来越多.下面介绍目前最流行的四种构建工具——grunt.gulp.browserify.webpack 所有的构建工具都是基于N ...
- Google软件构建工具Bazel FAQ
Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接 注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用方 ...
随机推荐
- mysql中什么是逻辑备份
需求描述: mysql中,或者说关系型数据库中逻辑备份到底指的是什么呢,主要还是对于 概念的理解,在此记录下. 概念解释: 逻辑备份:主要指的是保存数据库的逻辑结构(比如:create dattaba ...
- QlikView报表显示连续若干个月内活跃用户的数量
之前有朋友提到了这样一个需求,要计算三年中每年都有销售记录的客户量,仅仅有近期两年有销售纪录的客户量(假如某个用户2012年和2014年都有记录,在2013年没有则不计算在内).以及近期一年的新增客户 ...
- 【RF库Collections测试】Dictionary Should Contain Sub Dictionary
Name:Dictionary Should Contain Sub DictionarySource:Collections <test library>Arguments:[ dict ...
- PHP虚拟主机的配置
今天配置了一下虚拟目录,以下是我的配置方法. 1 编辑httpd.conf,查找Include conf/extra/httpd-vhosts.conf,把前面注释符号“#”删掉. 2 编辑htt ...
- Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取
为什么要写这篇文章 1. 因为最近在学习<软件调试>这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了K ...
- java基础---->多线程之ThreadLocal(七)
这里学习一下java多线程中的关于ThreadLocal的用法.人时已尽,人世还长,我在中间,应该休息. ThreadLocal的简单实例 一.ThreadLocal的简单使用 package com ...
- 在linux下安装wordpress
win下的简直傻瓜式操作:xampp打包一键安装 linux下的考虑到一些权限问题 还是有点蛋疼的 现在把流程贴出来做下记录: linux下安装xampp和wordpress的流程 ×由于linux下 ...
- poj3744 Scout YYF I[概率dp+矩阵优化]
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8598 Accepted: 2521 Descr ...
- Java初学者笔记二:关于类的常见知识点汇总
一.Java的类: Java的类是Java的基本概念了,基本的定义语法我就不提了,自己也不会忘了的,下面分成几个模块介绍: 1.Java的类定义时候的修饰符 2.Java的类的继承与派生 二.Java ...
- 心脏滴血HeartBleed漏洞研究及其POC
一.漏洞原理: 首先声明,我虽然能看懂C和C++的每一行代码,但是他们连在一起我就不知道什么鬼东西了.所以关于代码说理的部分只能参考其他大牛的博客了. /* 据说源码中有下面两条语句,反正我也没看过源 ...