|
发表于 2008-7-20 20:20:20
|
显示全部楼层
"好" 的概念至少依赖于下面几个考虑:
- 你的项目的目的? 个人使用/团队使用/发布? 后面两种情况通常需要更加灵活的 Makefile, 例如, 不同的人的目录布局很可能是不一样的.
- 你是否准备使用提供了自动生成机制的集成开发工具? 如果是, 这些工具生成的 Makefile 足够好?
- 你的项目要支持哪些平台? 用哪种语言开发? 使用哪些二进制库? 使用哪些源代码库? 这些平台/语言/库对 Makefile 有没有特殊要求?
- 你需要支持哪些 Make 实现?
- 你的系统的复杂性如何? 对于一个包含许多子系统的复杂系统, 其 Makefile 通常自成体系, 对它的质量要求不亚于实际的代码.
在复杂的系统中, 使用工具生成 Makefile 可以在更高的层次上思考部件的依赖问题, 而不必去考虑不同 Make 实现的细节, 这通常能减轻维护的负担. 不过, 手工提供不同版本的 Makefile 也是可行的 (例如, Chicken Scheme http://www.call-with-current-continuation.org/ 就使用了这种方式), 只是对开发者的要求会高一些 (需要了解多种 Make 的实现, 并寻找在不同实现与项目本身之间平衡的方法).
但是无论是手工写还是使用工具生成, 都需要了解至少一种 Make 的工作原理, 并且理解 Makefile 中涉及到的各种常用概念. GNU/Linux 上目前比较流行的是 GNU Make, 我建议你在使用它之前先读读它的手册: http://www.gnu.org/software/make/manual/html_node/index.html 第 1, 2 两章是一定要首先读完的, 然后你可以浏览一下其余各章的介绍概念的部分.
PS: 试过 cmake 和 autotools 以后, 我比较倾向于喜爱 autotools. 我认为 cmake 提供的语言过于简陋, 不够灵活, 并且与进程的交互比较麻烦. 这样, 虽然 cmake 能够实现它最初的目标, 但并不优雅. Autotools 的实现也不优雅, 但我感觉它更接近于优雅. |
|