Professional Documents
Culture Documents
2011 年秋季学期
基本工程工具
基本开发工具包 (SDK), 即编译和连接工具 ,
相应的支持文件 , 库等等
编辑器
调试工具
构建 (Build) 工具
版本和源代码管理工具
测试工具
集成开发环境 (IDE)
SDK
大家应该很熟悉了 , 编程绝对离不开它 .
不同编程语言 , 当然也不一样
同一编程语言 , 不同操作平台也不相同
不同厂家提供的产品也不相同
我们只介绍免费的或自由软件
纯粹 C 语言
lcc
- lcc 强大的免费的 Windows 下 C 语言的开发
包 , 由 Virginia 大学计算机系开发 , 包含所有
文档和一个集成开发环境
- 非常小 , 所有安装文件总共只有不到 6M, 但
是非常齐全 , 文档资料极为详尽 , 在 Windows
下学习 C 语言编程的极好工具和资料
- 广泛用于教学 , 也有不少商业应用
C/C++
绝大部分多数 SDK 同时包含 C/C++.
GCC
- GNU 的自由软件编译器 , 功能强大 , 文档资料详尽 , 几乎涵盖
了所有硬件和软件操作平台 ,Linux/Unix 的标准配置系统编译器
BCC
- Borland 公司的命令行编译器 , 可免费下载 ( 其 IDE 不免费 ),
同时还需下载相关文档资料 , 运行于 Windows 系统 , 大约十几
兆大小
Microsoft .NET SDK
- 微软公司的命令行工具 , 除 C/C++ 外 , 还可用于 C#, 可从其网
站免费下载 ( 其 IDE 不免费 ), 大约 100M. 当然了 , 只能用于微
软的 Windows 系统
JAVA
由 Sun 公司发明
几乎所有东西都免费 , 而且开放源代码
直接到 http://java.sun.com 下载
IBM 也提供自己的 JDK
编辑器
简单文本编辑器并不适合编程
Vi 和 Vim ( 自由软件 )
- Unix/Linux 下传统的文本器 , 功能强大 , Vim 改进后
增加了许多支持编程 ( 支持超过 100 种语言的语法 )
的功能 , 并且移植到了包括 Windows 的多种平台之上 .
EMACS ( 自由软件 )
- 功能极为强大的编辑器 , 集成许多功能 , 用户可以自
己定制和扩展 , 为众多程序员所采用
构建工具
自动管理许多文件之间的依赖关系 , 当某一个
文件修改时 , 找出受影响的其他文件并重新构
建
Make 及其变体 nmake, gmake
- makefile
Ant 构建工具
- build.xml
Makefile 的例子
CC=cl
RC=rc
LINK=link
.c.obj:
$(CC) -c $<
.rc.res:
$(RC) $<
simpledit.exe: simpledit.obj simpledit.res
$(LINK) simpledit.obj simpledit.res user32.lib
build.xml 的例子
<project name="MyProject" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
版本和源代码管理工具
版本与发行
为什么要管理版本
版本的一些基本概念和常识
源代码管理工具
动机
- 为什么需要工具来管理 ?
- 简单的文件管理和备份不行吗 ???
- 答案是 , 也许可以 , 如果你永不出错 , 并且
开发人员只有一个 .
- 请看以下的场景 :
场景一
当某个开发人员发现自己辛辛苦苦写出来的代
码保存好之后重新打开时确已面目全非 , 原来
另一个开发人员也在修改同一个文件 , 并且比
他晚几十分钟保存的 , 结果就……
场景二
曾经有一段编译调试好的代码在我面前,而我
因为想改的更好却没有保存;改来改去等到要
交作业的时候才发现,已经改得怎么也调试不
通了,这时我才追悔莫及。大学期间最痛苦的
事情莫过于此,只有在失去代码的时候才懂得
珍惜。如果这一切导致我获得一次重修的机会
的话,我要说……
版本管理概念 - 代码仓
数据(代码)的存储 – 数据(代码)仓
不是简单的文件服务器
必须记录对每一个文件的每一次改动
通常呈现给用户的是最新版本,但是必须记录所有历
史信息。“上周三的时候,某个文件是什么样的?”,
“谁最后一次对某个文件进行的修改,改动了什
么?”
区分几个概念:数据仓 (data repository), 数据库 (dat
abase), 数据仓库 (data warehouse)
版本管理概念 - 提交
工作副本( Working Copy ) 与 提交( Commit)
通常用户不能直接修改版本仓内的内容,将需要的内
容拷贝出来,并在其上工作,称为 Working Copy
用户的工作(修改文件等)只有提交( commit) 到版
本仓之后 ( 并且被接受),才纳入版本管理。版本仓
中保存有每次提交的版本。
用户尚未提交的工作需要自己负责,不受版本管理系
统的保护。丢失不赔!
版本管理概念 - 版本模型
必须实现信息共享,又要避免互相冲突
如果两个人同时修改同一个文件,第一个人先
完成并保存到数据仓,然后第二个人完成并保
存自己的新版本到数据仓。
会发生怎样的情况?第一个人的修改被覆盖了
(不一定完全丢失),最新版本只有第二个人
的修改。
这种情况必须避免
加锁 - 修改 - 解锁
在同一时刻仅允许一个人修改
每个用户在修改前必须首先对其加锁,这样其
他人就无法修改,数据仓会拒绝其他人的加锁
请求
该用户完成修改后,存入数据仓,然后解锁,
这样别人就可以使用了。
防止了上面的问题,但是……
复制 - 修改 - 合并
每个用户从数据仓获取一份拷贝,在自己的拷
贝上进行修改;
当用户将自己的修改保存到数据仓时,改用户
所做修改和其他用户的修改合并,生成新的版
本
冲突解决:两个用户修改同一个文件的同一部
分时
自由软件的版本管理系统
CVS 可以记录源代码变动的历史
CVS 可以帮助一组开发人员集体开发,避免
互相覆盖对方的工作
每个开发人员独立修改, CVS 将这些修改合
并
CVS 不是(或不能)
不是构建系统
不能取代管理
不能取代开发人员之间的沟通
不处理变动控制(可以和此类工具集成)
不是自动测试软件
不提供内置的过程模型
使用 CVS
Windows 遵照安装过程指导
创建作为数据仓的目录(如果还未做)
执行命令建立 CVS 仓观察结果
cvs –d /path/to/repos init
创建文件 CVSROOT/passwd 增加新用户
CVS 常见命令
login logout
import export
checkout
update
commit
add remove
CVS 更多
参见其官方文档
大多数集成开发环境内置 CVS 支持,只需设
置数据仓,使用菜单而不必敲入命令
CVS 的不足
以文件为中心的管理
SVN 简介
随着时间的推演, CVS 以文件为中心的版本管理暴
露出越来越多的问题
2000 年初, CollabNet, Inc 寻求开发人员开发一个取
代 CVS 的版本管理系统
他们找到了 Open Source Development with CVS 一
书的作者 Karl Fogel ,此前 Fogel 已经和他的朋友 Ji
m Blandy 讨论新的取代 CVS 的版本控制系统,并命
名为 subversion, 他们欣然答应
在一些其他人员的帮助下, 2001 正式推出了 subvers
ion 。
http://subversion.tigris.org/
SVN 的特点
全局修订号,而不是针对每个文件的,这不同
于 CVS
数据仓以 URL 表示,通用性强
对目录和元数据也记录版本信息
GIT 起源
Linux 内核早期大多数时间( 1991-2001 )
的版本维护通过补丁( patch) 和文件( archi
ved files) 传递
从 2002 年开始使用了一家商业公司的封闭的
私有版本管理系统 BitKeeper
2005 年两家闹崩了,不能免费使用了
这刺激了 Linux 开发者(特别是 Linus) 要开
发自己的工具
GIT 简单历史
说干就干, 2005 年 4 月 3 日, Linus 亲自上阵,开始
写为 Linux 内核使用的版本控制系统,命名为 git
2005 年 4 月 6 日项目发布
2005 年 4 月 7 日投入第 1 次使用,给自己做版本管理
2005 年 4 月 18 日第 1 次合并多个分支
2005 年 4 月 29 日进行基准测试, GIT 全面胜出
2005 年 6 月 16 日 Linux 内核 2.6.12 改用 git 做版本
管理
2005 年 7 月 26 日 GIT 项目移交 Junio Hamano 负责
2005 年 12 月 21 日 git 1.0 版发布
GIT 的设计标准 (Linus)
不要 CVS
支持分布式的工作流
超强防护性(无意或者恶意破坏)
超高性能
GIT 特征
强力支持并行开发
分布式开发
对现有系统 / 协议的兼容性
高效率处理大项目
加密验证项目历史
基于工具箱的设计
可插拔的合并策略
垃圾收集
周期性打包
GIT 概念
版本仓 (repository) --- 包含了一系列版本( commit),
以及针对特定版本的引用 (head)--- 存放在根目录的 .
svn 子目录下
版本( commit) --- 一族文件集合,对父版本的引用,
一个 SHA1 名字 (40 字符的串)
头( head) --- 对版本的引用,有一个名字。每个版
本仓有一个默认的头,叫做 master
这刺激了 Linux 开发者(特别是 Linus) 要开发自己
的工具
GIT 概念 -- 引用一个 commit
SHA1 名字或者前几个字符
通过 head 名字
相对引用,后缀 ^ 代表父版本
GIT 概念 --- 合作
功能强大,这里仅仅介绍概念
更多命令、更多用法需要自己动手实践
CVS 和 SVN / GIT 的选择
将所有工具集成到一起,方便易用,提高开发
效率
Eclipse – 功能强大的自由软件 IDE, 可使用插
件来扩展,受到许多公司包括 IBM 等的支持,
官方网站:
http://www.eclipse.org
Eclipse 的特点
基于 Java 的自由软件,因而跨平台
很好的支持重构
支持代码自动生成
支持从代码生成设计
支持插件,通过插件扩展功能
可以直接在其上开发
很好的和其他工具集成
其他工具
我们以后还会讲到的,比如 UML