时隔半年,终于再次鼓起勇气,开始准备着手记录点什么。从今年三月开始到现在,就一直没有写过任何博客,记录下任何知识。其中有一大部分原因是因为自己克制力太差的原因,即使是这么有兴趣的事情自己还是没能每天持之以恒的坚持。以后会尽量避免,坚持每天都能越来越好一点。自己之所以选择在这么偏僻(没人会来看)的一个地方记录自己所学,而没有选择在CSDN 博客园之类的搜索引擎很容易找到的地方,还是之前原因。自己所学的这些基础,不足挂齿,百度一下千篇一律的文章,我的就不上去献丑了。在这僻静之地留我自己偶尔看看巩固一下即可。。。不碎碎念了,接下来记录一下这两天重新看过的GDB
在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o] 文件,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。
“隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的Makefile中没有书写这样的规则。例如,把[.c]文件编译成[.o]文件这一规则,你根本就不用写出来,make会自动推导出这种规则,并生成我们需要的[.o]文件。
“隐含规则”会使用一些我们系统变量,我们可以改变这些系统变量的值来定制隐含规则的运行时的参数。如系统变量“CFLAGS”可以控制编译时的编译器参数。
我们还可以通过“模式规则”的方式写下自己的隐含规则。用“后缀规则”来定义隐含规则会有许多的限制。使用“模式规则”会更回得智能和清楚,但“后缀规则”可以用来保证我们Makefile的兼容性。
我们了解了“隐含规则”,可以让其为我们更好的服务,也会让我们知道一些“约定俗成”了的东西,而不至于使得我们在运行Makefile时出现一些我们觉得莫名其妙的东西。当然,任何事物都是矛盾的,水能载舟,亦可覆舟,所以,有时候“隐含规则”也会给我们造成不小的麻烦。只有了解了它,我们才能更好地使用它。
Makefile运行最简单的方法就是输入make命令后执行,这样子make命令会去找寻Makefile文件中第一个目标,然后寻找此目标的依赖文件,找寻依赖文件的依赖文件,然后递归去寻找依赖文件的依赖文件的依赖文件,比对其更新时间,如果对应目标所依赖文件更新时间在目标文件之前,就会执行对应目标之下的命令,以编译出最新的目标文件,这是一个递归的过程,所需细节需要自己慢慢去体会,这里反正我已经理解了,就不做过多解释。嘿嘿!
当然有时候make命令不一定要编译文件中第一个目标,可以依据参数来指定某个目标,或者传入对应参数,执行make的不同功能,此章节就是要讲述Makefile运行的细节。