全部学习汇总: GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and let's find an common way so we may don't need to touch makefile code any more! (github.com)

         这部分的知识来自于GNU make的使用手册<2.5 Letting make Deduce the Recipes>,make是可以自动推导出c文件的依赖关系的。不过,前提是你想让你的object文件跟你的c文件除了扩展名之外的文件名相同。

         这样,之前在小结1中写过的makefile就可以精简修改为如下方式:

1732_makefile编写小结2_实现c文件依赖的自动推导_使用手册

         此处需要注意的是,CC必须指定。在makefile中,这是默认的c编译器的名字。关于这部分,GNU make手册中或许会有相应的说明。学习到目前的章节暂时还没有看到相关的描述,不过这个倒是自己根据经验尝试试出来了。

         如果对makefile进行更进一步的精简化、规整化,那么可以把重复出现的部分变量化。这在一定程度上跟我们学习到的任何编程语言都是想通的。

         继续修改makefile如下:

1732_makefile编写小结2_实现c文件依赖的自动推导_c语言_02

         两个版本的运行效果全都一致:

1732_makefile编写小结2_实现c文件依赖的自动推导_GNU_03

         继续往下走,我觉得makefile应该加入文件夹的处理了。下一次的尝试争取能够把code1、code2相关代码分到两个文件夹中进行编译。如果能够实现全部的功能,那基本上就能够处理一个小规模的软件工程了。如果不好实现,或许会考虑先完成没有头文件依赖的makefile,然后在那个基础上更进一步。