- 浏览: 2035750 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
1. 基本使用
SConstruct文件就功能而言相当于Makefile文件,就内容而言则是Python脚本,scons读入它时,会把脚本的命令都执行一遍,但具体编译过程则有scons自己相机而定。
Program('hello.c')
Program('new_hello','hello_c') 前为目标,后为源文件
Program(['prog.c','file1.c','file2.c']) 多个源文件
Program(‘program',['prog.c','file1.c','file2.c']) 指定目标文件,多个源文件
Program('program‘,Glob('*.c'))
Program('program',Split('main.c file.c file2.c')) 多个原文件更清晰的写法
src_files=Split("""main.c
file1.c
file2.c""")
Program(target='program',source=src_files)
2. 编译多个目标文件就多次调用Program()
3.8 多个程序共享源文件
eg.1
Program(Split('foo.c common1.c common2.c'))
Program('bar', Split('bar1.c bar2.c common1.c common2.c'))
eg.2
common = ['common1.c', 'common2.c']
foo_files = ['foo.c'] + common
bar_files = ['bar1.c', 'bar2.c'] + common
Program('foo', foo_files)
Program('bar', bar_files)
4. 库编译和链接
4.1 库编译
Library('foo', ['f1.c', 'f2.c', 'f3.c'])
4.1.1 你甚至可以在文件List里混用源文件和.o文件
Library('foo', ['f1.c', 'f2.o', 'f3.c', 'f4.o'])
4.1.2 显式编译静态库
StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])
4.1.3 编译动态库
SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])
4.2 库链接
Library('foo', ['f1.c', 'f2.c', 'f3.c'])
Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')
不用指明库的前缀和后缀,如lib,.a等。
4.3 找到库:$LIBPATH变量
Program('prog.c', LIBS = 'm',
LIBPATH = ['/usr/lib', '/usr/local/lib'])
Unix上 LIBPATH = '/usr/lib:/usr/local/lib'
Windows上 LIBPATH = 'C:\\lib;D:\\lib'
5. 节点对象(nodes)
SCons把所有知道的文件和目录表示为节点。
5.1 builder方法的返回值都是节点对象List,这一点很重要,在python中List+List还是List,下面可以看到应用。
hello_list = Object('hello.c', CCFLAGS='-DHELLO')
goodbye_list = Object('goodbye.c', CCFLAGS='-DGOODBYE')
Program(hello_list + goodbye_list)
这里如果不使用变量的话,就不能跨平台使用了,因为不同系统object扩展名是不同的
5.2 显示创建文件和目录节点
hello_c = File('hello.c')
Program(hello_c)
classes = Dir('classes')
Java(classes, 'src')
一般,你不用显式调用他们,因为builder方法会自动处理文件名字符串并转换为节点的。
当你不知道目标是文件还是目录时:
xyzzy = Entry('xyzzy')
5.3 打印节点文件名
hello_c = File('hello.c')
Program(hello_c)
classes = Dir('classes')
Java(classes, 'src')
object_list = Object('hello.c')
program_list = Program(object_list)
print "The object file is:", object_list[0]
print "The program file is:", program_list[0]
5.4 把节点文件名当作字符串来使用
imp
program_list = Program('hello.c')
program_name = str(program_list[0])
if not os.path.exists(program_name):
print program_name, "does not exist!"
此例判断了文件是否存在
6. 依赖关系
6.1
Decider函数,确定文件是否被修改
6.1.1 默认使用MD5检查源文件内容而不是时间戳,用touch不算修改过
显示调用
Program('hello.c')
Decider('MD5')
6.1.2 使用时间戳
Program('hello.c')
Decider('timestamp-newer')
与下面语句等价
Program('hello.c')
Decider('make')
更详细的检查
Program('hello.c')
Decider('timestamp-match')
6.1.3 两者同时使用
Program('hello.c')
Decider('MD5-timestamp')
6.3 $CPPPATH 隐含依赖关系
Program('hello.c', CPPPATH = ['include', '/home/project/inc'])
会在编译时加 -I
6.4 缓冲隐式依赖关系
% scons -Q --implicit-cache hello 运行选项
SetOption('implicit_cache', 1) 写在脚本里
这样下次就不用从头开始找依赖关系了
% scons -Q --implicit-deps-changed hello
再打开
6.5 显式依赖关系: Depends函数
当Scons没有找到关系时
hello = Program('hello.c')
Depends(hello, 'other_file')
6.9 总是编译
hello = Program('hello.c')
AlwaysBuild(hello)
7. 环境
7.2 创建环境
7.2.1
imp ort os
env = Environment(CC = 'gcc',
CCFLAGS = '-O2')
env.Program('foo.c')
% scons -Q
7.2.2 获取环境变量
env = Environment()
print "CC is:", env['CC']
% scons -Q
CC is: cc
scons: `.' is up to date.
env = Environment(FOO = 'foo', BAR = 'bar')
dict = env.Dictionary()
for key in ['OBJSUFFIX', 'LIBSUFFIX', 'PROGSUFFIX']:
print "key = %s, value = %s" % (key, dict[key])
This SConstruct file will print the specified dictionary items for us on POSIX systems as follows:
% scons -Q
key = OBJSUFFIX, value = .o
key = LIBSUFFIX, value = .a
key = PROGSUFFIX, value =
scons: `.' is up to date.
13. Install安装文件至其他文件夹
env = Environment()
hello = env.Program('hello.c')
env.Install('/usr/bin', hello)
13.1 在目录里安装多个文件
env = Environment()
hello = env.Program('hello.c')
goodbye = env.Program('goodbye.c')
env.Install('/usr/bin', [hello, goodbye])
env.Alias('install', '/usr/bin')
13.2 一个文件不同存放
env = Environment()
hello = env.Program('hello.c')
env.InstallAs('/usr/bin/hello-new', hello)
env.Alias('install', '/usr/bin')
% scons -Q install
cc -o hello.o -c hello.c
cc -o hello hello.o
Install file: "hello" as "/usr/bin/hello-new"
14 平台独立的文件系统操作
14.1 复制
Command("file.out", "file.in", Copy("$TARGET", "$SOURCE"))
或者
Command("file.out", [], Copy("$TARGET", "file.in"))
16. 多层目录构建
Sconconstruct在最顶层
16.1 SConscript文件可以层层包含
SConscript(['drivers/SConscript',
'parser/SConscript',
'utilities/SConscript'])
在drivers下:
SConscript(['display/SConscript',
'mouse/SConscript'])
16.2 对文件SConscript的相对目录
SConscript(['prog1/SConscript',
'prog2/SConscript'])
发表评论
-
Berkeley DB 使用经验总结
2012-08-27 14:41 3086作者:陈磊 NoSQL是现在互联网Web2.0时代备受 ... -
嵌入式数据库系统Berkeley DB
2012-08-27 14:37 1533前言 UNIX/LINUX平台下的数据库种类非常多 ... -
C语言中标准输入流、标准输出流、标准错误输出流
2011-06-13 14:32 9291C语言中标准输入流、标准输出流、标准错误输出流 在 ... -
Rsync 实现原理
2011-05-12 20:06 8319Rsync 实现原理 前言 关于rsync的原始文档 ... -
c++简单的虚函数测试
2011-04-27 14:25 1020#include <iostream> u ... -
C++文件行查找
2011-04-26 14:10 1408#include <iostream> # ... -
c++偏特化简单示例
2011-04-13 11:17 2156c++偏特化 // temp1.c ... -
GDB调试精粹及使用实例
2011-03-16 14:06 1140GDB调试精粹及使用实例 一:列文件清单 1. ... -
简单的ini文件解析
2011-02-12 16:36 1620int GetKeyVal(const string s ... -
scanf族函数高级用法
2011-01-25 16:00 2559如何解释 fscanf(fd,&quo ... -
使用scons替代makefile(1)
2011-01-25 11:58 3731早在多年前我刚开始接触linux下的C程序时,经常被makef ... -
使用scons替代makefile(2)
2011-01-25 11:57 3583本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态 ... -
使用scons替代makefile(3)
2011-01-25 11:55 4821在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序 ... -
C 支持动态添加测试数据的测试代码
2011-01-13 17:22 1119/下面的定义为了支持可扩增。 //当需要增加一个新的测试用列 ... -
Linux下Makefile的automake生成
2010-12-28 16:55 1101******************helloworld.c* ... -
scons 学习
2010-12-23 11:14 2181scons 学习 作者:Sam(甄峰) sam_code@h ... -
scons随笔
2010-12-22 20:20 4707scons随笔 Scons是新一代的软件构件工具,或者说ma ... -
Scons在linux下的安装和使用
2010-12-21 11:59 3286因为正在用的一个开源软件需要的Developm ... -
排列组合的实现
2010-12-20 12:41 1063简单算法: 从前往后(或者从后往前)每次交换一个位置。当存在 ... -
UDP编程的服务器 Linux
2010-10-22 18:44 1337UDP编程的服务器端一般步骤是: ...
相关推荐
首先,让我们详细讨论Python的安装。Python提供了适用于各种操作系统(包括Windows)的安装程序。对于64位Windows系统,你需要下载对应版本的Python安装包,通常以`python-3.x.x-amd64.exe`命名,其中`x.x`表示...
Python自动化构建工具scons使用入门笔记主要介绍了如何使用Python编写的自动化构建工具scons。Scons是一种开放源代码的软件构建和安装工具,它使用Python语言编写,用于替代传统的Makefile构建系统。Scons主要的设计...
1. C语言基础知识:在《C学习笔记PDF》中,涵盖了C语言的基本概念和语法。文件提到的是C99标准,这是C语言的一个标准版本,它引入了许多改进和新特性。 2. 数据类型:文件详细介绍了C语言中的数据类型,包括基本的...
总结来说,这篇笔记详细介绍了在RT-Thread操作系统上添加和使用SPI Flash设备的过程,包括STM32CubeMX的配置、Kconfig的修改、SFUD库的集成以及实际编程操作。通过这些步骤,开发者可以顺利地在STM32平台上实现对SPI...
以下是详细的知识点梳理。 1. 开发环境搭建:整个开发环境建立在Windows XP操作系统上,使用的集成开发环境是Keil MDK4.71a版本。除了IDE之外,还需要安装Python 2.7版本,并且安装Scons 2.0.1作为项目构建软件。 ...
以下是对各个部分的详细说明: **第一部分:语言基础** 1. **数据类型** - `char`:8位有符号整数。 - `short`:16位有符号整数。 - `int`:32位有符号整数。 - `long`:在32位系统为32位整数,64位系统为64位...
标题“C99 学习笔记”直接指向了文档的主题,即对C语言的深度学习和研究,特别聚焦于C99标准。C99标准是C语言的一个版本,由ISO/IEC制定,并在1999年发布,它带来了对C语言的重大更新和改进。为了充分利用C语言的...
- **SCons构建工具**:使用SCons更新工程时可能出现错误,此时可能需要关闭Env工具,重新打开并运行`pkgs --update`命令。 - **fal_cfg.h文件**:如果编译报错,可能是因为缺少fal_cfg.h文件,需将其复制到Board...
STM32 RTT学习笔记(二)主要涉及在RT-Thread实时操作系统上为STM32F407VET6芯片添加UART(通用异步收发传输器)外设驱动的过程。RT-Thread是一个轻量级、高效率的嵌入式实时操作系统,广泛应用于物联网和嵌入式系统...
在本应用笔记中,将会详细介绍如何在RT-Thread操作系统中驱动MPU6050,并且会通过实例代码来展示如何在STM32F4探索者开发板上实现这一过程。开发板所使用的MCU为STM32F407ZGT6,它本身带有I2C硬件控制器,但是也可以...
5. Scons:另一个构建工具,基于Python构建。 6. Git:版本控制系统,用于代码管理。 7. Debug:调试技术,包括使用调试器和打印输出。 8. Binutils:一系列用于二进制文件的工具集合。 9. Manpages:手册页,...
在本篇基于QEMU的文件系统学习笔记中,我们将探讨如何在QEMU模拟环境中实现一个简单的文件匹配功能,类似于Linux的`ls`命令。这个功能的实现主要涉及以下几个步骤: 一、文件匹配流程 1. **打开当前目录**:首先,...
在RT-Thread中,GPIO驱动在系统初始化时被配置,并且可以通过scons命令行工具或者menuconfig工具进行配置。在menuconfig中,开发者需要进入RT-Thread Components -> Device Drivers -> Using generic GPIO device ...
- **Make和Scons**:这两部分分别介绍了Make和Scons这两种构建工具的使用方法,对于自动化构建过程非常有用。 - **Git**:文档还介绍了版本控制系统Git的基本操作,这对于协作开发尤其重要。 通过以上分析可以看出...
本文将详细介绍如何将RT-Thread操作系统移植到STM32F407VET6芯片上,以帮助初学者快速掌握RT-Thread的移植流程。 #### 二、移植准备 在开始移植工作之前,我们需要准备好必要的硬件和软件环境: - **硬件**:基于...
**BH1721FVC-E 光线传感器芯片详解** **概述** BH1721FVC-E 是一款专为I2C总线接口设计的数字环境光传感器集成电路。这款芯片非常适合用于调整手机的LCD和键盘背光亮度,以获取精确的环境光照数据。...
通过这个详细的RT-Thread培训资料讲解,开发者可以系统性地学习和掌握RT-Thread的各个方面,从而在实际的物联网产品开发中游刃有余。配合实践练习和笔记习题,将理论知识转化为实际技能,提升个人或团队的开发效率。
CMake实践中文翻译版文档详细介绍了CMake这一跨平台的开源工程构建工具,该工具最初是由Kitware公司和一些开源开发者在开发VTK等项目的过程中衍生出来的。CMake诞生于2001年,是一个独立的开源项目,具有开放源代码...