title: 如何系统地学习Makefile相关的知识（读/写）？
desc: 先说下情况：<br>学习使用配置移植修改 Linux 环境下开源软件，如搞 u-boot 下载代码后，搞懂怎么顺利编译，然后根据成功编译的官方工程修改移植到自己的平台上。因为是新手，所以对一些惯例（固定套路什么的）不很理解。<br><br>看的几个开源代码分别有什么 Makefile，mkconfig，config.mk，还有 autoconfig，.configure 等等好多，和 make 相关的文件工具配置方法好像有好几种不同的“套路”，看的有点乱。<br><br>还有 u-boot 移植时的分析时，成功 make 后，我去分析主 Makefile，发现里面内容好多，尤其是一些宏变量的定义和判断，和变量赋值的问题很多很凌乱。<br><br>还有 u-boot 涉及到软件的配置，通过make xxxconfig 和 修改某个 .h 头文件可以实现对工程的配置，选择性编译。配置是不是还主要要看相应软件的文档的？<br><br>问题：<br>1. 有没有什么书籍文章 是专门系统介绍 makefile 和相关工具的使用的？<br>2. 如 u-boot 这种开源工程的 Makefile 是自动生成的还是手工写的（变量太多阅读起来不是很“友善”）？有没有什么惯例写法或是常用工具？<br>3. 有没有什么惯例方法去分析 Makefile ，达到对工程的配置和修改的目的？<br>4. 得到一个新的开源工程代码，要实现使用移植修改，有没有惯例的或比较好的分析方法？<br>5. 自己去做一个项目，可以通过何种工具创建 makefile 呢？除了makefile 有更好的选择吗？<br> 补充<br>6. 一个相关的问题，gcc c语言的工具链整个这些工具有没有什么适合入门的书籍？深入的话是去看各个工具的官方文档就好了吗？<br>7. 对于一个已有的能够正确执行的 Makefile 文件，比如 u-boot 的那种，如果想分析Makefile 的执行过程，只能用人眼跟踪吗？有没有像IDE中Debug那种类似的能单步跟踪 Makefile 执行过程的工具？（2014.5.28补充）<br>（2014.5.18补充）<br>主要侧重是如何读开源文档的 Makefile 和对其修改配置。<br><br>（其实主要的疑问是 “学习方法”，各种 “惯例” 的问题）
topic: 软件开发
content: 是时候祭出这篇文章了，大神 陈皓 写的跟我一起写makefile，记得去年组长第一次要我完整地写一个模块的代码时，我用一下午的时间把这篇文章粗略地看了一下，写了个很搓的makefile，但最终还是把代码都编译成可执行程序了。链接在这里跟我一起写 Makefile（一） 。另外还有一个别人整理的pdf版本，非常方便学习。
answerer_tags: 小程序猿/伪足球狗/穆里尼奥球迷