第1章 策略与管理 1
条款1:把所有的平台都放在同样重要的位置 1
条款2:使用公共的代码 3
工厂模式在不同平台上的实现 8
类的实现 9
平台相关的ProcessesImpl类 10
创建实例层次 18
用CVS或SVN组织项目 20
编译代码和Makefile 22
条款3:要求开发人员用不同的编译器编译代码 24
条款4:要求开发人员在不同的平台上编译代码 26
条款5:测试所有的平台 28
条款6:关注编译警告 29
GNU标志 29
微软Visual C++ 30
第2章 Build系统和Toolchain 31
条款7:使用最适合平台的编译器 31
条款8:尽量使用本地1DE 32
条款9:在Windows上安装和使用Cygwin 34
条款10:使用跨平台的Make系统 37
Make 37
在Windows上编译Makefile和源码 40
Autoconf/Automake 43
Imake 46
在Mac OS X上安装Imake 46
在Windows上安装Imake 46
一个例子:使用Imake 48
Imakefile文件 49
完整编译的一个多文件程序 49
在site.def里重写默认值 51
去除代码里的#ifdefs 53
Imake中用到的文件 57
编译含有子目录的项目 58
Debug的编译 73
第3章 软件配置管理 74
条款11:使用跨平台的bug报告和跟踪系统 74
可访问性 75
跟踪平合相关bug的能力 75
Bugzilla 75
条款12:设置Tinderbox 80
条款13:用CVS或Subversion来管理源代码 84
设置和使用CVS 86
条款14:使用patch 90
一个例子 90
patch选项 91
应对reject 92
patch和跨平台开发 93
第4章 安装与部署 94
条款15:为本地安装程序提供支持 94
XPInstall 94
平台安装 97
第5章 操作系统接口和库 130
条款16:使用标准API(如POSIX ) 130
POSIX 130
支持POSIX、 SVID、 XPG和BSD 132
在GCC里使用标准支持 133
微软Runtime Library对POSIX的支持 135
在Windows上使用GCC 137
决定支持哪个标准 141
条款17:考虑使用NSPR这样的平台抽象库 141
为什么要开发NSPR 142
NSPR基础 143
线程 146
NSPR的其他功能 153
第6章 其他可移植性主题 161
条款18:慎用浮点数 161
不要把浮点值序列化为二进制 162
判断相等 163
条款19:显式地注明char类型的符号 164
条款20:避免序列化二进制数据 165
条款21:避免类型长度和组织带来的问题 174
整型的长度 174
NSPR里的类型 176
长度和效率 177
整型转换 177
struct的对齐和顺序 178
第7章 用户界面 180
条款22:从Model里把用户界面分离出来 180
用Model/ View把用户界面和程序逻辑分开 181
用Publish/Subscribe在View和Model之间通讯 190
小结 192
条款23:开发一个跨平台用户界面的策略 193
影响跨平台GUI开发移植性的问题 193
选择GUI的策略 194
第8章wxWidgets 196
wxWidgets概述 197
许可协议 197
安装wxWidgets 197
一个简单的例子:Hello wxWidgets 199
创建应用程序的用户界面 200
编译wxWidgets应用程序 205
控件与事件 207
容器widget 216
对话框 235
复合式widget 243
国际化和本地化 247
第9章用C++开发跨平台GUI工具包 259
什么是XUL 259
DHTML 260
HTML 260
脚本语言 262
文档对象模型 263
样式系统 265
XUL 266
窗口和对话框 266
box元素 266
工具条 268
菜单 268
控件 268
其他widget 268
用XUL编程 269
用JavaScript为UI添加逻辑 269
用XPCOM和XPConnect接口化JavaScript 270
和C/C++ 270
Trixul 271
Trixul支持的widget 272
Trixul的基本操作 272
widget 273
类的实现 275
创建widget实现的对象 280
widget工厂 282
应用程序主循环 285
Trixul创建用户界面的步骤 288
文档、元素和DOM 288
创建widget 291
布局 292
滚动窗口和布局 296
和JavaScript集成 297
和C++组件集成 304