您的位置:首页 > 其它

很好的关于makefile文件以及其他组织makefile的方法介绍

2018-03-16 19:57 393 查看
摘抄知乎答案:

作者:煎挠橙
链接:https://www.zhihu.com/question/23792247/answer/83243277
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我试着逐个回答一下题主的问题。
1. 有没有什么书籍/文章 是专门系统介绍 makefile 和相关工具的使用的?有,很多,不过我只推荐两个:
一个是陈皓(微博:左耳朵耗子的微博)的《跟我一起写Makefile》。
原地址跟我一起写 Makefile(一),这是一个系列,你可以在博客的目录里面找剩下的。
不过有热心网友做了重新排版,提供各种格式,阅读体验更好,地址在这里:跟我一起写Makefile (PDF重制版) · SeisMan
By the way 陈皓的博客酷壳 – CoolShell.cn 做的很好,推荐看看。
另外一个是《Managing Projects with GNU Make》地址:amazon.com 的页面
《跟我一起写Makefile》类似于xx分钟掌握xx的教程,适合快速上手,但如果你想系统的学习一下gnu make的话最好把《Managing Projects with GNU Make》看了,其实一两个小时也就看下来了,花不了太多的时间。
当然跟其他的技术一样,只是看书并不能让你完全掌握gnu make的用法,你还需要尽可能的自己多写,外加有机会了看看人家手写的Makefile去学习,假以时日自然就成高手了。
我个人还是很喜欢make本身的,因为任何一台Linux机器上都预装的有,学会了非常安心省力。
2. 如 u-boot 这种开源工程的 Makefile 是自动生成的还是手工写的(变量太多阅读起来不是很“友善”)?有没有什么惯例写法或是常用工具?
是生成的,要用到其他的工具,是另外一个话题了,感兴趣的话题主可以去google,关键词:
CMake
Autotools
SCons
项目大了依赖多了以后手动维护Makefile会变得很头疼,另外跨平台build也是个问题,这些工具都是为了解决这两个问题出现的。背后的原理倒是大同小异,大多还是根据一定的规则和环境来自动生成Makefile。题主先把gnu make玩熟了再根据需求看这些东西就很顺畅了。
另外这些工具生成的Makefile就没必要去看了
3. 有没有什么惯例方法去分析 Makefile ,达到对工程的配置和修改的目的?
这个我见识少还真不知道有什么惯例。
但个人经验上看,Makfile本身的结构还是非常简单的,就是一个依赖树,顶多就是长一点。题主把上面提到的make的书看了以后直接去看人家手写的Makefile就能看懂了,之后再修改那是很自然的事情。
如果项目是用其他的build工具自动生成的Makefile的话那没办法,你还是得去看相应的工具是怎么用的才行。不过gnu make是基础,万变不离其宗。
4. 得到一个新的开源工程代码,要实现使用/移植/修改,有没有惯例的或比较好的分析方法?
这事儿轮子哥说过,先看文档再看测试你就会搞了。
什么?没有文档/测试?这种鬼项目就别看了。
5. 自己去做一个项目,可以通过何种工具创建 makefile 呢?除了makefile 有更好的选择吗?

总的来说就是你在写项目的时候需要一个自动化的build工具,摆在面前的有很多选择:make,cmake,SCons等。他们解决的问题类似,但使用方法不同,并没有谁比谁更好的说法,一切的一切都不过是取舍而已,根据你自己的情况和需求进行取舍找到一个最优解就好了。
6. 一个相关的问题,gcc c语言的工具链整个这些工具有没有什么适合入门的书籍?深入的话是去看各个工具的官方文档就好了吗?
想比较系统的了解怎么用gcc的话推荐这本书:《An Introduction to GCC》,地址:
amazon.com 的页面
这本书并不涉及gcc的实现细节,只讲了gcc是怎么编译链接的,并且细致地讲了gcc的各个flag的作用,只是用gcc的话,看这些就行了。这本书看的话也很快,一两个小时就行。
其实题主如果想用好gnu make的话gcc的用法也还是要搞清楚的。
至于想深入下去,题主可以去看看gcc的实现细节。其他工具的只要不是古董级的玩意儿,官方文档就很好了(man命令出来的东西真没法看)。
7. 对于一个已有的能够正确执行的 Makefile 文件,比如 u-boot 的那种,如果想分析Makefile 的执行过程,只能用人眼跟踪吗?有没有像IDE中Debug那种类似的能单步跟踪 Makefile 执行过程的工具?(2014.5.28补充)

很遗憾据我所知gnu make没有IDE中那种Debug工具,debug Makefile的主要做法还是把里面的变量打印出来,具体做法的话前面提到的《Managing Projects with GNU Make》这本书里最后一章做了简要的介绍,书里还提到了gnu make自带的一些方便debug的特性。
另外《The gnu make book》这本书里面有一章专门讲debug的,写的不错。不过这个书其他内容看起来没那么清楚所以前面没有推荐用来学习入门。
注:上面提到的所有英文书籍都可以在 Library Genesis 上找到。发布于 2016-01-25
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐