第一部分 基本概念 11
第一章 如何编写一个简单的makefile 11
工作目标与必要条件 12
检查依存关系 14
尽量减少重新编译的工作量 15
调用make 16
Makefile的基本语法 17
第二章 规则 19
具体规则 20
变量 25
以VPATH和vpath来查找文件 27
模式规则 31
隐含规则 35
特殊工作目标 40
自动产生依存关系 41
管理程序库 45
第三章 变量与宏 52
变量的用途 53
变量的类型 54
宏 56
何时扩展变量 58
工作目标与模式的专属变量 61
变量来自何处 62
条件指令与引入指令的处理 65
标准的make变量 69
第四章 函数 72
用户自定义函数 72
内置函数 75
高级的用户自定义函数 92
解析命令 100
第五章 命令 100
使用哪个shell 109
空命令 110
命令环境 110
对命令脚本求值 111
命令行的长度限制 112
第二部分 高级与特别的议题 119
第六章 大型项目的管理 119
递归式make 120
非递归式make 129
大型系统的组件 136
文件系统的布局 138
自动编译与测试 140
第七章 具可移植性的makefile 141
可移植性的若干内容 142
Cygwin 143
管理程序和文件 146
使用不具可移植性的工具 149
automake 151
分开源文件与二进制文件 153
第八章 C与C++ 153
只读的源文件树 161
产生依存关系 161
支持多个二进制文件树 166
部分的源文件树 168
引用编译结果、程序库以及安装程序 169
第九章 Java 171
make的替代方案 172
一个通用的Java makefile 175
编译Java 179
管理jar 187
引用树与来自第三方的jar文件 189
Enterprise JavaBeans 190
第十章 改进make的效能 194
基准测试 194
找出瓶颈与处理瓶颈 199
并行式make 202
分布式make 206
本书的makefile 208
第十一章 makefile实例 208
Linux内核的makefile 229
第十二章 makefile的调试 241
make的调试功能 241
编写用于调试的代码 248
常见的错误信息 254
第三部分 附录 261
附录一 运行make 261
附录二 越过make的极限 264
索引 275