- 浏览: 578575 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
小网客:
噱头 没实际意义
【互动出版网】11.11购物狂欢节重磅大促,免费领万千优惠券 -
tongchuang123:
这是要出书了吗:o
微信控 控微信 -
韶华无限:
这也可以出本书……
玩转微信(彩印) -
zhukewen_java:
无语了。。。哪天出本《玩转QQ》?
玩转微信(彩印) -
yaying:
我只见过MySQL Cookbook中文版
jQuery Cookbook中文版
《深入理解软件构造系统:原理与最佳实践》
基本信息
原书名:Software Build Systems:Principles and Experience
原出版社: Pearson Education
作者: (加)Peter Smith
译者: 仲田
丛书名: 华章专业开发者丛书
出版社:机械工业出版社
ISBN:9787111382263
上架时间:2012-5-25
出版日期:2012 年6月
开本:16开
页码:1
版次:1-1
所属分类: 计算机 > 软件工程及软件方法学 > 综合
更多关于》》》《深入理解软件构造系统:原理与最佳实践》
内容简介
计算机书籍
构造系统在软件开发过程中处于核心地位,它的正确性和性能,在一定程度上决定了软件开发成果的质量和软件开发过程的效率。本书作者作为一名软件构造系统专家,总结了自己在构造系统开发和维护方面的多年经验,对软件构造系统的原理进行了深入浅出的剖析,并通过各种实际使用场景,对几种最流行的构造工具进行了对比分析,另外还讨论了构造系统的性能优化、规模提升等高级主题。
《深入理解软件构造系统:原理与最佳实践》分为四部分。第一部分:基础知识,第1~5章分别从构造系统的高层概念、基于make的构造系统、程序的运行时视图、文件类型与编译工具、子标的与构造变量等方面介绍构造系统的概念和相关主题。第二部分:构造工具,第6~10章结合实际场景案例,对gnu make、ant、scons、cmake和eclipse ide这五种构造工具进行分析比较,品评优劣,帮助读者了解构造工具的当前状况,并理解每种工具的优缺点。第三部分:高级主题,第11~16章对依赖关系、元数据、软件打包与安装、构造机器、工具管理等高级主题进行讨论,帮助读者理解关于建设构造系统的许多高级主题,并了解最佳实践。第四部分:提升规模,第17~19章讨论了在大规模构造系统的环境下,如何降低复杂性,提高构造运行速度,帮助读者理解如何设计出能够适应规模增长的小型构造系统,从而对软件构造系统有更好的认识。
《深入理解软件构造系统:原理与最佳实践》适合软件开发相关人员,包含软件开发人员、项目经理、软件构造专业人士等阅读。
目录
《深入理解软件构造系统:原理与最佳实践》
对本书的赞誉
译者序
前 言
致 谢
作者介绍
第一部分 基础知识
第1章 构造系统概述2
1.1 什么是构造系统2
1.1.1 编译型语言3
1.1.2 解释型语言3
1.1.3 web应用4
1.1.4 单元测试5
1.1.5 静态分析5
1.1.6 文档生成6
1.2 构造系统的各个组成部分6
1.2.1 版本控制工具7
1.2.2 源树与目标树7
1.2.3 编译工具和构造工具8
1.2.4 构造机器9
.1.2.5 发布打包与目标机器9
1.3 构造过程和构造描述11
1.4 如何使用构造系统12
构造管理工具12
1.5 构造系统的质量13
本章小结14
第2章 基于make的构造系统15
2.1 calculator示例15
2.2 创建一个简单的makefile17
2.3 对这个makefile进行简化19
2.4 额外的构造任务20
2.5 框架的运用21
本章小结23
第3章 程序的运行时视图24
3.1 可执行程序24
3.1.1 原生机器码25
3.1.2 单体系统镜像25
3.1.3 程序完全解释执行26
3.1.4 解释型字节码26
3.2 程序库28
3.2.1 静态链接28
3.2.2 动态链接29
3.3 配置文件和数据文件30
3.4 分布式程序30
本章小结31
第4章 文件类型与编译工具33
4.1 c/c++34
4.1.1 编译工具34
4.1.2 源文件35
4.1.3 汇编语言文件37
4.1.4 目标文件38
4.1.5 可执行程序40
4.1.6 静态程序库40
4.1.7 动态程序库41
4.1.8 c++编译42
4.2 java43
4.2.1 编译工具43
4.2.2 源文件44
4.2.3 目标文件45
4.2.4 可执行程序47
4.2.5 程序库48
4.3 c#48
4.3.1 编译工具49
4.3.2 源文件49
4.3.3 可执行程序51
4.3.4 程序库53
4.4 其他文件类型55
4.4.1 基于uml的代码生成56
4.4.2 图形图像57
4.4.3 xml配置文件58
4.4.4 国际化与资源绑定58
本章小结59
第5章 子标的与构造变量60
5.1 针对子标的进行构造61
5.2 针对软件的不同版本进行构造62
5.2.1 指定构造变量63
5.2.2 对代码的定制调整65
5.3 针对不同的目标系统架构进行构造68
5.3.1 多重编译器68
5.3.2 面向指定平台的文件/功能69
5.3.3 多个目标树69
本章小结71
第二部分 构造工具
现实场景75
场景1:源代码放在单个目录中75
场景2:源代码放在多个目录中76
场景3:定义新的编译工具76
场景4:针对多个变量进行构造77
场景5:清除构造树77
场景6:对不正确的构造结果进行调试78
第6章 make79
6.1 gnu make编程语言80
6.1.1 makefile规则:用来建立依赖关系图80
6.1.2 makefile规则的类型81
6.1.3 makefile变量82
6.1.4 内置变量和规则84
6.1.5 数据结构与函数85
6.1.6 理解程序流程87
6.1.7 进一步阅读资料90
6.2 现实世界的构造系统场景90
6.2.1 场景1:源代码放在单个目录中90
6.2.2 场景2(a):源代码放在多个目录中92
6.2.3 场景2(b):对多个目录进行迭代式make操作93
6.2.4 场景2(c):对多个目录进行包含式make操作96
6.2.5 场景3:定义新的编译工具101
6.2.6 场景4:针对多个变量进行构造102
6.2.7 场景5:清除构造树104
6.2.8 场景6:对不正确的构造结果进行调试105
6.3 赞扬与批评107
6.3.1 赞扬107
6.3.2 批评108
6.3.3 评价109
6.4 其他类似工具110
6.4.1 berkeley make110
6.4.2 nmake111
6.4.3 electricaccelerator和spark build111
本章小结113
第7章 ant115
7.1 ant编程语言116
7.1.1 比“hello world”稍多一些116
7.1.2 标的的定义和使用118
7.1.3 ant的控制流119
7.1.4 属性的定义120
7.1.5 内置的和可选的任务122
7.1.6 选择多个文件和目录125
7.1.7 条件126
7.1.8 扩展ant语言127
7.1.9 进一步阅读资料128
7.2 现实世界的构造系统场景129
7.2.1 场景1:源代码放在单个目录中129
7.2.2 场景2(a):源代码放在多个目录中130
7.2.3 场景2(b):多个目录,多个build.xml文件130
7.2.4 场景3:定义新的编译工具133
7.2.5 场景4:针对多个变量进行构造136
7.2.6 场景5:清除构造树140
7.2.7 场景6:对不正确的构造结果进行调试141
7.3 赞扬与批评142
7.3.1 赞扬143
7.3.2 批评143
7.3.3 评价144
7.4 其他类似工具144
7.4.1 nant144
7.4.2 ms build145
本章小结146
第8章 scons147
8.1 scons编程语言148
8.1.1 python编程语言148
8.1.2 简单编译151
8.1.3 管理构造环境154
8.1.4 程序流程和依赖关系分析157
8.1.5 决定何时重新编译158
8.1.6 扩展该语言160
8.1.7 其他有趣的特性162
8.1.8 进一步阅读资料163
8.2 现实世界的构造系统场景163
8.2.1 场景1:源代码放在单个目录中163
8.2.2 场景2(a):源代码放在多个目录中163
8.2.3 场景2(b):多个sconstruct文件164
8.2.4 场景3:定义新的编译工具165
8.2.5 场景4:针对多个变量进行构造167
8.2.6 场景5:清除构造树168
8.2.7 场景6:对不正确的构造结果进行调试169
8.3 赞扬与批评171
8.3.1 赞扬171
8.3.2 批评172
8.3.3 评价173
8.4 其他类似工具173
8.4.1 cons173
8.4.2 rake174
本章小结176
第9章 cmake177
9.1 cmake编程语言178
9.1.1 cmake语言基础178
9.1.2 构造可执行程序和程序库179
9.1.3 控制流182
9.1.4 跨平台支持184
9.1.5 生成原生构造系统185
9.1.6 其他有趣的特性以及进一步阅读资料190
9.2 现实世界的构造系统场景191
9.2.1 场景1:源代码放在单个目录中191
9.2.2 场景2:源代码放在多个目录中191
9.2.3 场景3:定义新的编译工具192
9.2.4 场景4:针对多个变量进行构造193
9.2.5 场景5:清除构造树194
9.2.6 场景6:对不正确的构造结果进行调试194
9.3 赞扬与批评195
9.3.1 赞扬195
9.3.2 批评195
9.3.3 评价196
9.4 其他类似工具196
9.4.1 automake196
9.4.2 qmake197
本章小结197
第10章 eclipse199
10.1 eclipse的概念和gui199
10.1.1 创建项目200
10.1.2 构造项目206
10.1.3 运行项目210
10.1.4 使用内部项目模型212
10.1.5 其他构造特性213
10.1.6 进一步阅读资料214
10.2 现实世界的构造系统场景215
10.2.1 场景1:源代码放在单个目录中215
10.2.2 场景2:源代码放在多个目录中216
10.2.3 场景3:定义新的编译工具217
10.2.4 场景4:针对多个变量进行构造217
10.2.5 场景5:清除构造树220
10.2.6 场景6:对不正确的构造结果进行调试220
10.3 赞扬与批评221
10.3.1 赞扬221
10.3.2 批评221
10.3.3 评价222
10.4 其他类似工具222
本章小结224
第三部分 高级主题
第11章 依赖关系226
11.1 依赖关系图227
11.1.1 增量式编译228
11.1.2 完全、增量式和子标的构造228
11.2 依赖关系错误导致的问题229
11.2.1 问题:依赖关系缺失导致运行时错误229
11.2.2 问题:依赖关系缺失导致编译错误230
11.2.3 问题:多余的依赖关系导致大量不必要的重新构造231
11.2.4 问题:多余的依赖关系导致依赖关系分析失败231
11.2.5 问题:循环依赖关系232
11.2.6 问题:以隐式队列顺序替代依赖关系232
11.2.7 问题:clean标的什么也清除不了233
11.3 步骤一:计算依赖关系图233
11.3.1 获取确切的依赖关系234
11.3.2 把依赖关系图缓存起来236
11.3.3 对缓存的依赖关系图进行更新237
11.4 步骤二:判断哪些文件已过期239
11.4.1 基于时间戳的方法240
11.4.2 基于校验和的方法241
11.4.3 标志参数比较242
11.4.4 其他高级方法243
11.5 步骤三:为编译步骤排定队列顺序243
本章小结246
第12章 运用元数据进行构造247
12.1 调试支持247
12.2 性能分析支持249
12.3 代码覆盖分析支持250
12.4 源代码文档化251
12.5 单元测试253
12.6 静态分析256
12.7 向构造系统加入元数据257
本章小结258
第13章 软件打包与安装259
13.1 归档文件260
13.1.1 用于打包的脚本260
13.1.2 其他归档文件格式262
13.1.3 对打包脚本的改进263
13.2 包管理工具265
13.2.1 rpm包管理工具格式265
13.2.2 rpm build过程266
13.2.3 rpm规格文件示例267
13.2.4 根据规格文件创建rpm文件272
13.2.5 安装rpm示例274
13.3 定制式gui安装工具275
13.3.1 nullsoft scriptable install system(nsis)276
13.3.2 安装工具脚本277
13.3.3 定义安装页面280
13.3.4 许可授权页面281
13.3.5 选择安装目录282
13.3.6 主要组件282
13.3.7 可选组件283
13.3.8 定制页面285
13.3.9 安装页面和卸载程序286
本章小结288
第14章 版本管理289
14.1 对哪些东西进行版本控制290
14.1.1 构造描述文件290
14.1.2 对工具的引用292
14.1.3 大型二进制文件296
14.1.4 对源树的配置296
14.2 哪些东西不应当放到源树中297
14.2.1 生成的文件被保存到源树中297
14.2.2 生成的文件被纳入到版本控制中299
14.2.3 构造管理脚本299
14.3 版本编号300
14.3.1 版本编号体系300
14.3.2 协调并更新版本号301
14.3.3 版本号的保存与检索302
本章小结303
第15章 构造机器305
15.1 原生编译与跨平台编译306
15.1.1 原生编译306
15.1.2 跨平台编译306
15.1.3 异构环境307
15.2 集中式开发环境307
15.2.1 构造机器为何有差异308
15.2.2 管理多个构造机器310
15.3 开源开发环境312
15.4 gnu autoconf315
15.4.1 高层次工作流315
15.4.2 autoconf示例317
15.4.3 运行autoheader和autoconf319
15.4.4 在构造机器上运行configure脚本320
15.4.5 使用配置信息322
本章小结323
第16章 工具管理324
16.1 工具管理的规则324
16.1.1 规则1:做笔记324
16.1.2 规则2:对源代码进行版本控制325
16.1.3 规则3:定期升级工具326
16.1.4 规则4:对工具的二进制文件进行版本控制327
16.1.5 对规则的破坏329
16.2 编写自己的编译工具329
用lex和yacc编写定制工具330
本章小结332
第四部分 提升规模
第17章 降低最终用户面对的复杂性334
17.1 构造框架334
17.1.1 面向开发人员的构造描述335
17.1.2 面向框架的构造描述336
17.1.3 惯例优先于配置336
17.1.4 构造工具示例:maven337
17.2 避免支持多个构造变量的原因338
17.2.1 需要测试更多的构造变量338
17.2.2 代码会变得混乱339
17.2.3 构造时间会增多340
17.2.4 需要更多磁盘空间340
17.3 降低复杂性的各种技术方法340
17.3.1 使用现代构造工具340
17.3.2 自动检测依赖关系341
17.3.3 把生成的文件放在源树之外341
17.3.4 确保正确清除构造树341
17.3.5 碰到第一个错误即中止构造342
17.3.6 提供有意义的错误信息343
17.3.7 校验输入参数343
17.3.8 不要把构造脚本搞得过分复杂344
17.3.9 避免使用晦涩的语言特性344
17.3.10 不要用环境变量控制构造过程345
17.3.11 确保构造形成的发布版与调试版保持相似345
17.3.12 准确显示正在执行的命令346
17.3.13 把对工具的引用纳入版本控制347
17.3.14 把构造指令纳入版本控制347
17.3.15 自动检测编译标志参数的变化347
17.3.16 不要在构造系统中调用版本控制工具347
17.3.17 尽量频繁地进行持续集成348
17.3.18 统一使用一种构造机器348
17.3.19 统一使用一种编译器348
17.3.20 避免遗留#ifdefs的垃圾代码348
17.3.21 使用有意义的符号名349
17.3.22 删除垃圾代码349
17.3.23 不要复制源文件350
17.3.24 使用统一的构造系统350
17.4 对构造系统进行规划充分、人力充足的改进351
本章小结352
第18章 管理构造规模353
18.1 单体模型构造存在的问题354
18.2 组件式软件355
18.2.1 使用组件的好处357
18.2.2 组件到底是什么358
18.2.3 把多个组件集成到单个产品中361
18.3 人员和过程管理364
18.3.1 开发团队的结构365
18.3.2 组件版本队列管理367
18.3.3 管理组件缓存368
18.3.4 协调软件新特性的开发370
18.4 apache ivy372
本章小结373
第19章 更快的构造375
19.1 度量构造系统性能375
19.1.1 启动阶段的性能度量375
19.1.2 编译阶段的性能度量382
19.1.3 性能度量工具386
19.1.4 修正问题:改进性能388
19.2 构造减免:消除不必要的重新构造389
19.2.1 目标文件缓存389
19.2.2 智能依赖关系391
19.2.3 构造减免的其他技术方法395
19.3 并行396
19.3.1 构造集群/云396
19.3.2 并行构造工具397
19.3.3 对可伸缩性的限制398
19.4 减少磁盘使用398
本章小结400
参考文献401
本图书信息来源:中国互动出版网
基本信息
原书名:Software Build Systems:Principles and Experience
原出版社: Pearson Education
作者: (加)Peter Smith
译者: 仲田
丛书名: 华章专业开发者丛书
出版社:机械工业出版社
ISBN:9787111382263
上架时间:2012-5-25
出版日期:2012 年6月
开本:16开
页码:1
版次:1-1
所属分类: 计算机 > 软件工程及软件方法学 > 综合
更多关于》》》《深入理解软件构造系统:原理与最佳实践》
内容简介
计算机书籍
构造系统在软件开发过程中处于核心地位,它的正确性和性能,在一定程度上决定了软件开发成果的质量和软件开发过程的效率。本书作者作为一名软件构造系统专家,总结了自己在构造系统开发和维护方面的多年经验,对软件构造系统的原理进行了深入浅出的剖析,并通过各种实际使用场景,对几种最流行的构造工具进行了对比分析,另外还讨论了构造系统的性能优化、规模提升等高级主题。
《深入理解软件构造系统:原理与最佳实践》分为四部分。第一部分:基础知识,第1~5章分别从构造系统的高层概念、基于make的构造系统、程序的运行时视图、文件类型与编译工具、子标的与构造变量等方面介绍构造系统的概念和相关主题。第二部分:构造工具,第6~10章结合实际场景案例,对gnu make、ant、scons、cmake和eclipse ide这五种构造工具进行分析比较,品评优劣,帮助读者了解构造工具的当前状况,并理解每种工具的优缺点。第三部分:高级主题,第11~16章对依赖关系、元数据、软件打包与安装、构造机器、工具管理等高级主题进行讨论,帮助读者理解关于建设构造系统的许多高级主题,并了解最佳实践。第四部分:提升规模,第17~19章讨论了在大规模构造系统的环境下,如何降低复杂性,提高构造运行速度,帮助读者理解如何设计出能够适应规模增长的小型构造系统,从而对软件构造系统有更好的认识。
《深入理解软件构造系统:原理与最佳实践》适合软件开发相关人员,包含软件开发人员、项目经理、软件构造专业人士等阅读。
目录
《深入理解软件构造系统:原理与最佳实践》
对本书的赞誉
译者序
前 言
致 谢
作者介绍
第一部分 基础知识
第1章 构造系统概述2
1.1 什么是构造系统2
1.1.1 编译型语言3
1.1.2 解释型语言3
1.1.3 web应用4
1.1.4 单元测试5
1.1.5 静态分析5
1.1.6 文档生成6
1.2 构造系统的各个组成部分6
1.2.1 版本控制工具7
1.2.2 源树与目标树7
1.2.3 编译工具和构造工具8
1.2.4 构造机器9
.1.2.5 发布打包与目标机器9
1.3 构造过程和构造描述11
1.4 如何使用构造系统12
构造管理工具12
1.5 构造系统的质量13
本章小结14
第2章 基于make的构造系统15
2.1 calculator示例15
2.2 创建一个简单的makefile17
2.3 对这个makefile进行简化19
2.4 额外的构造任务20
2.5 框架的运用21
本章小结23
第3章 程序的运行时视图24
3.1 可执行程序24
3.1.1 原生机器码25
3.1.2 单体系统镜像25
3.1.3 程序完全解释执行26
3.1.4 解释型字节码26
3.2 程序库28
3.2.1 静态链接28
3.2.2 动态链接29
3.3 配置文件和数据文件30
3.4 分布式程序30
本章小结31
第4章 文件类型与编译工具33
4.1 c/c++34
4.1.1 编译工具34
4.1.2 源文件35
4.1.3 汇编语言文件37
4.1.4 目标文件38
4.1.5 可执行程序40
4.1.6 静态程序库40
4.1.7 动态程序库41
4.1.8 c++编译42
4.2 java43
4.2.1 编译工具43
4.2.2 源文件44
4.2.3 目标文件45
4.2.4 可执行程序47
4.2.5 程序库48
4.3 c#48
4.3.1 编译工具49
4.3.2 源文件49
4.3.3 可执行程序51
4.3.4 程序库53
4.4 其他文件类型55
4.4.1 基于uml的代码生成56
4.4.2 图形图像57
4.4.3 xml配置文件58
4.4.4 国际化与资源绑定58
本章小结59
第5章 子标的与构造变量60
5.1 针对子标的进行构造61
5.2 针对软件的不同版本进行构造62
5.2.1 指定构造变量63
5.2.2 对代码的定制调整65
5.3 针对不同的目标系统架构进行构造68
5.3.1 多重编译器68
5.3.2 面向指定平台的文件/功能69
5.3.3 多个目标树69
本章小结71
第二部分 构造工具
现实场景75
场景1:源代码放在单个目录中75
场景2:源代码放在多个目录中76
场景3:定义新的编译工具76
场景4:针对多个变量进行构造77
场景5:清除构造树77
场景6:对不正确的构造结果进行调试78
第6章 make79
6.1 gnu make编程语言80
6.1.1 makefile规则:用来建立依赖关系图80
6.1.2 makefile规则的类型81
6.1.3 makefile变量82
6.1.4 内置变量和规则84
6.1.5 数据结构与函数85
6.1.6 理解程序流程87
6.1.7 进一步阅读资料90
6.2 现实世界的构造系统场景90
6.2.1 场景1:源代码放在单个目录中90
6.2.2 场景2(a):源代码放在多个目录中92
6.2.3 场景2(b):对多个目录进行迭代式make操作93
6.2.4 场景2(c):对多个目录进行包含式make操作96
6.2.5 场景3:定义新的编译工具101
6.2.6 场景4:针对多个变量进行构造102
6.2.7 场景5:清除构造树104
6.2.8 场景6:对不正确的构造结果进行调试105
6.3 赞扬与批评107
6.3.1 赞扬107
6.3.2 批评108
6.3.3 评价109
6.4 其他类似工具110
6.4.1 berkeley make110
6.4.2 nmake111
6.4.3 electricaccelerator和spark build111
本章小结113
第7章 ant115
7.1 ant编程语言116
7.1.1 比“hello world”稍多一些116
7.1.2 标的的定义和使用118
7.1.3 ant的控制流119
7.1.4 属性的定义120
7.1.5 内置的和可选的任务122
7.1.6 选择多个文件和目录125
7.1.7 条件126
7.1.8 扩展ant语言127
7.1.9 进一步阅读资料128
7.2 现实世界的构造系统场景129
7.2.1 场景1:源代码放在单个目录中129
7.2.2 场景2(a):源代码放在多个目录中130
7.2.3 场景2(b):多个目录,多个build.xml文件130
7.2.4 场景3:定义新的编译工具133
7.2.5 场景4:针对多个变量进行构造136
7.2.6 场景5:清除构造树140
7.2.7 场景6:对不正确的构造结果进行调试141
7.3 赞扬与批评142
7.3.1 赞扬143
7.3.2 批评143
7.3.3 评价144
7.4 其他类似工具144
7.4.1 nant144
7.4.2 ms build145
本章小结146
第8章 scons147
8.1 scons编程语言148
8.1.1 python编程语言148
8.1.2 简单编译151
8.1.3 管理构造环境154
8.1.4 程序流程和依赖关系分析157
8.1.5 决定何时重新编译158
8.1.6 扩展该语言160
8.1.7 其他有趣的特性162
8.1.8 进一步阅读资料163
8.2 现实世界的构造系统场景163
8.2.1 场景1:源代码放在单个目录中163
8.2.2 场景2(a):源代码放在多个目录中163
8.2.3 场景2(b):多个sconstruct文件164
8.2.4 场景3:定义新的编译工具165
8.2.5 场景4:针对多个变量进行构造167
8.2.6 场景5:清除构造树168
8.2.7 场景6:对不正确的构造结果进行调试169
8.3 赞扬与批评171
8.3.1 赞扬171
8.3.2 批评172
8.3.3 评价173
8.4 其他类似工具173
8.4.1 cons173
8.4.2 rake174
本章小结176
第9章 cmake177
9.1 cmake编程语言178
9.1.1 cmake语言基础178
9.1.2 构造可执行程序和程序库179
9.1.3 控制流182
9.1.4 跨平台支持184
9.1.5 生成原生构造系统185
9.1.6 其他有趣的特性以及进一步阅读资料190
9.2 现实世界的构造系统场景191
9.2.1 场景1:源代码放在单个目录中191
9.2.2 场景2:源代码放在多个目录中191
9.2.3 场景3:定义新的编译工具192
9.2.4 场景4:针对多个变量进行构造193
9.2.5 场景5:清除构造树194
9.2.6 场景6:对不正确的构造结果进行调试194
9.3 赞扬与批评195
9.3.1 赞扬195
9.3.2 批评195
9.3.3 评价196
9.4 其他类似工具196
9.4.1 automake196
9.4.2 qmake197
本章小结197
第10章 eclipse199
10.1 eclipse的概念和gui199
10.1.1 创建项目200
10.1.2 构造项目206
10.1.3 运行项目210
10.1.4 使用内部项目模型212
10.1.5 其他构造特性213
10.1.6 进一步阅读资料214
10.2 现实世界的构造系统场景215
10.2.1 场景1:源代码放在单个目录中215
10.2.2 场景2:源代码放在多个目录中216
10.2.3 场景3:定义新的编译工具217
10.2.4 场景4:针对多个变量进行构造217
10.2.5 场景5:清除构造树220
10.2.6 场景6:对不正确的构造结果进行调试220
10.3 赞扬与批评221
10.3.1 赞扬221
10.3.2 批评221
10.3.3 评价222
10.4 其他类似工具222
本章小结224
第三部分 高级主题
第11章 依赖关系226
11.1 依赖关系图227
11.1.1 增量式编译228
11.1.2 完全、增量式和子标的构造228
11.2 依赖关系错误导致的问题229
11.2.1 问题:依赖关系缺失导致运行时错误229
11.2.2 问题:依赖关系缺失导致编译错误230
11.2.3 问题:多余的依赖关系导致大量不必要的重新构造231
11.2.4 问题:多余的依赖关系导致依赖关系分析失败231
11.2.5 问题:循环依赖关系232
11.2.6 问题:以隐式队列顺序替代依赖关系232
11.2.7 问题:clean标的什么也清除不了233
11.3 步骤一:计算依赖关系图233
11.3.1 获取确切的依赖关系234
11.3.2 把依赖关系图缓存起来236
11.3.3 对缓存的依赖关系图进行更新237
11.4 步骤二:判断哪些文件已过期239
11.4.1 基于时间戳的方法240
11.4.2 基于校验和的方法241
11.4.3 标志参数比较242
11.4.4 其他高级方法243
11.5 步骤三:为编译步骤排定队列顺序243
本章小结246
第12章 运用元数据进行构造247
12.1 调试支持247
12.2 性能分析支持249
12.3 代码覆盖分析支持250
12.4 源代码文档化251
12.5 单元测试253
12.6 静态分析256
12.7 向构造系统加入元数据257
本章小结258
第13章 软件打包与安装259
13.1 归档文件260
13.1.1 用于打包的脚本260
13.1.2 其他归档文件格式262
13.1.3 对打包脚本的改进263
13.2 包管理工具265
13.2.1 rpm包管理工具格式265
13.2.2 rpm build过程266
13.2.3 rpm规格文件示例267
13.2.4 根据规格文件创建rpm文件272
13.2.5 安装rpm示例274
13.3 定制式gui安装工具275
13.3.1 nullsoft scriptable install system(nsis)276
13.3.2 安装工具脚本277
13.3.3 定义安装页面280
13.3.4 许可授权页面281
13.3.5 选择安装目录282
13.3.6 主要组件282
13.3.7 可选组件283
13.3.8 定制页面285
13.3.9 安装页面和卸载程序286
本章小结288
第14章 版本管理289
14.1 对哪些东西进行版本控制290
14.1.1 构造描述文件290
14.1.2 对工具的引用292
14.1.3 大型二进制文件296
14.1.4 对源树的配置296
14.2 哪些东西不应当放到源树中297
14.2.1 生成的文件被保存到源树中297
14.2.2 生成的文件被纳入到版本控制中299
14.2.3 构造管理脚本299
14.3 版本编号300
14.3.1 版本编号体系300
14.3.2 协调并更新版本号301
14.3.3 版本号的保存与检索302
本章小结303
第15章 构造机器305
15.1 原生编译与跨平台编译306
15.1.1 原生编译306
15.1.2 跨平台编译306
15.1.3 异构环境307
15.2 集中式开发环境307
15.2.1 构造机器为何有差异308
15.2.2 管理多个构造机器310
15.3 开源开发环境312
15.4 gnu autoconf315
15.4.1 高层次工作流315
15.4.2 autoconf示例317
15.4.3 运行autoheader和autoconf319
15.4.4 在构造机器上运行configure脚本320
15.4.5 使用配置信息322
本章小结323
第16章 工具管理324
16.1 工具管理的规则324
16.1.1 规则1:做笔记324
16.1.2 规则2:对源代码进行版本控制325
16.1.3 规则3:定期升级工具326
16.1.4 规则4:对工具的二进制文件进行版本控制327
16.1.5 对规则的破坏329
16.2 编写自己的编译工具329
用lex和yacc编写定制工具330
本章小结332
第四部分 提升规模
第17章 降低最终用户面对的复杂性334
17.1 构造框架334
17.1.1 面向开发人员的构造描述335
17.1.2 面向框架的构造描述336
17.1.3 惯例优先于配置336
17.1.4 构造工具示例:maven337
17.2 避免支持多个构造变量的原因338
17.2.1 需要测试更多的构造变量338
17.2.2 代码会变得混乱339
17.2.3 构造时间会增多340
17.2.4 需要更多磁盘空间340
17.3 降低复杂性的各种技术方法340
17.3.1 使用现代构造工具340
17.3.2 自动检测依赖关系341
17.3.3 把生成的文件放在源树之外341
17.3.4 确保正确清除构造树341
17.3.5 碰到第一个错误即中止构造342
17.3.6 提供有意义的错误信息343
17.3.7 校验输入参数343
17.3.8 不要把构造脚本搞得过分复杂344
17.3.9 避免使用晦涩的语言特性344
17.3.10 不要用环境变量控制构造过程345
17.3.11 确保构造形成的发布版与调试版保持相似345
17.3.12 准确显示正在执行的命令346
17.3.13 把对工具的引用纳入版本控制347
17.3.14 把构造指令纳入版本控制347
17.3.15 自动检测编译标志参数的变化347
17.3.16 不要在构造系统中调用版本控制工具347
17.3.17 尽量频繁地进行持续集成348
17.3.18 统一使用一种构造机器348
17.3.19 统一使用一种编译器348
17.3.20 避免遗留#ifdefs的垃圾代码348
17.3.21 使用有意义的符号名349
17.3.22 删除垃圾代码349
17.3.23 不要复制源文件350
17.3.24 使用统一的构造系统350
17.4 对构造系统进行规划充分、人力充足的改进351
本章小结352
第18章 管理构造规模353
18.1 单体模型构造存在的问题354
18.2 组件式软件355
18.2.1 使用组件的好处357
18.2.2 组件到底是什么358
18.2.3 把多个组件集成到单个产品中361
18.3 人员和过程管理364
18.3.1 开发团队的结构365
18.3.2 组件版本队列管理367
18.3.3 管理组件缓存368
18.3.4 协调软件新特性的开发370
18.4 apache ivy372
本章小结373
第19章 更快的构造375
19.1 度量构造系统性能375
19.1.1 启动阶段的性能度量375
19.1.2 编译阶段的性能度量382
19.1.3 性能度量工具386
19.1.4 修正问题:改进性能388
19.2 构造减免:消除不必要的重新构造389
19.2.1 目标文件缓存389
19.2.2 智能依赖关系391
19.2.3 构造减免的其他技术方法395
19.3 并行396
19.3.1 构造集群/云396
19.3.2 并行构造工具397
19.3.3 对可伸缩性的限制398
19.4 减少磁盘使用398
本章小结400
参考文献401
本图书信息来源:中国互动出版网
发表评论
-
【互动出版网】2013双12全场科技类图书6.5折封顶
2013-12-12 16:30 1135【互动出版网】2013双12全场科技类图书6.5折封顶 ... -
C#编程兵书
2013-08-28 17:43 1198《C#编程兵书》 基本信息 作者: 张志强 胡君 丛书 ... -
C++编程兵书
2013-08-28 17:24 1216《C++编程兵书》 基本 ... -
HTML+CSS网站开发兵书
2013-08-28 17:04 1396《HTML+CSS网站开发兵书 ... -
Java编程兵书
2013-08-27 17:57 1224《Java编程兵书》 基本 ... -
网络运维与管理2013超值精华本
2013-08-27 17:44 1337《网络运维与管理2013超值精华本》 基本信息 作者: ... -
HTML5游戏开发进阶指南
2013-08-27 17:26 1317《HTML5游戏开发进阶指 ... -
ASP.NET MVC 4高级编程(第4版)
2013-08-26 17:58 1087《ASP.NET MVC 4高级编程(第4版)》 基本信息 ... -
嗨翻C语言
2013-08-26 17:40 1170《嗨翻C语言》 基本信息 作者: (美)David Gr ... -
C++ Primer中文版(第5版)
2013-08-26 17:20 1132《C++ Primer中文版(第5版) 》 基本信息 作 ... -
云计算原理与实践
2013-08-20 17:02 573《云计算原理与实践》 基本信息 作者: 游小明 罗光春 ... -
微信公众平台搭建与开发揭秘
2013-08-20 16:53 990《微信公众平台搭建与开发揭秘》 基本信息 作者: 易伟 ... -
精通iOS开发(第5版)
2013-08-20 16:25 1033《精通iOS开发(第5版)》 基本信息 原书名:Begi ... -
企业门户(Portal)项目实施方略与开发指南
2013-08-20 16:12 957《企业门户(Portal)项目实施方略与开发指南》 基本信 ... -
Java开发手册
2013-08-20 15:56 940《Java开发手册》 基本信息 作者: 桂颖 谷涛 出 ... -
Unity3D手机游戏开发
2013-08-08 17:33 1127《Unity3D手机游戏开发》 基本信息 作者: 金玺曾 ... -
矛与盾:黑客攻防命令大曝光
2013-08-08 16:30 765《矛与盾:黑客攻防命令大曝光》 基本信息 作者: awk ... -
视觉繁美:信息可视化方法与案例解析
2013-08-08 16:10 921《视觉繁美:信息可视 ... -
精益设计: 设计团队如何改善用户体验
2013-08-08 15:55 764《精益设计: 设计团队如何改善用户体验》 基本信息 原书 ... -
云计算与OpenStack(虚拟机Nova篇)
2013-08-08 15:19 944《云计算与OpenStack(虚拟机Nova篇)》 基本信 ...
相关推荐
### 深入理解软件构造系统(Software Build Systems)——核心知识点详解 #### 一、基础知识 **1.1 构造系统的概念** 构造系统(Software Build Systems)是指用于自动化软件构建过程的一套工具和流程。它负责将源...
《软件构造系统:原理与最佳实践》是一本深入探讨软件构建过程、理论和技术的专业书籍。在软件工程领域,软件构造是整个开发周期中至关重要的环节,它涉及到代码编写、编译、测试、集成以及版本控制等多个方面。这...
本书作者作为一名软件构造系统专家,总结了自己在构造系统开发和维护方面的多年经验,对软件构造系统的原理进行了深入浅出的剖析,并通过各种实际使用场景,对几种最流行的构造工具进行了对比分析,另外还讨论了构造...
《深入理解软件构造系统原理与最佳实践》这本书深入探讨了软件构造系统的方方面面,旨在帮助读者掌握构建高效、可维护的软件系统的关键技术和方法。在软件工程领域,软件构造系统是核心概念之一,它涉及到代码编写、...
这本书详细讲解了Android系统的核心组件、运行机制以及应用程序设计的最佳实践,是提升Android开发技能的重要参考资料。 在本书中,你可以了解到以下关键知识点: 1. **Android系统架构**:书中首先介绍了Android...
《深入理解计算机系统》是计算机科学领域的一本经典教材,由Randal E. Bryant和David R. O'Hallaron合著。这本书通过讲解计算机系统的各个层次,帮助读者建立起从高级编程语言到机器语言的全面理解。第三版在原有的...
《软件体系结构》PDF版是一本深入探讨软件系统构建核心概念和最佳实践的专业书籍。它旨在帮助读者理解和掌握软件设计的高级构造,从而能够创建高效、可维护且可扩展的软件解决方案。 软件体系结构是软件开发过程中...
跟我一起写Makefile-陈皓.pdf 深入理解软件构造系统 原理与最佳实践.pdf,Managing Projects with GNU Make.pdf 相关微博链接 http://www.cnblogs.com/noticeable/p/8371767.html
《深入理解Android 卷3》是一本专注于Android系统应用分析的专业书籍,对于想要深入了解Android平台开发者而言,无疑是一份宝贵的资源。这本书详细剖析了Android系统的各个核心组件和框架,为读者提供了全面而深入的...
《C++程序设计原理与...通过学习这些内容,读者不仅可以掌握C++的基础,还能深入理解其高级特性和最佳实践,从而成为熟练的C++开发者。这份讲义是C++学习者宝贵的参考资料,通过结合代码实践,能够全面提升编程能力。
《C++程序设计原理与实践》是C++之父Bjarne Stroustrup的最新力作,这本书旨在帮助读者深入理解C++的核心概念和技术,并通过实际案例加深对这些技术的理解和应用能力。作为一本高级编程教程,它不仅适合初学者,也...
《Spring技术内幕:深入解析Spring架构与设计原理》这本书深入探讨了Spring框架的核心架构和设计原则,适合已经对Spring有一定了解并希望更深入理解其内部工作原理的进阶读者。Spring作为一个开源的Java平台,它不仅...
《软件工程:实践者的研究方法》是软件工程领域的一本经典教材,其...通过深入学习这本书和参考答案,不仅可以掌握软件工程的基本原理和最佳实践,还能培养出解决实际问题的能力,为未来从事软件开发工作打下坚实基础。
这本书全面介绍了软件工程的理论、原则和最佳实践,旨在帮助读者理解并掌握软件开发的全过程,从需求分析到系统维护。以下是对书中主要知识点的详细阐述: 1. **软件工程概述**:软件工程是应用工程原理、方法和...
《数据库管理系统原理与设计答案》第三版是针对学习数据库管理系统的宝贵参考资料,提供了全面的解答,帮助读者深入理解数据库系统的核心概念。本书涵盖了从数据库设计的基础到高级主题,如存储、索引、查询优化和...
这种量化方法有助于深入理解系统异构性对抵御攻击的效果。 为了量化异构性,文章提出了一种新的计算方法,该方法可以分析影响异构性的各种因素,包括执行体的数量、执行体之间的差异度以及系统的动态性等。通过这种...
通过深入学习和实践这些内容,开发者不仅可以掌握Spring的核心原理,还能了解到如何在实际项目中应用Spring的最佳实践,从而提高开发效率和软件质量。无论是初学者还是经验丰富的开发者,这本书都能提供宝贵的指导和...
在应用软件工程原理编程时,我们需要遵循一系列最佳实践,如需求分析、设计、编码、测试和维护。需求分析是明确项目目标和功能的过程,设计阶段会根据需求创建软件架构和组件。编码阶段将设计转化为实际的代码,同时...
在虚拟机上安装Linux系统可以帮助理解操作系统如何与硬件交互,而制作小型操作系统则要求对操作系统构造有深入理解。 题目二:演示操作系统层次结构的实际例子 这一题目强调了操作系统的分层架构,包括硬件层、操作...