文章简介
想要在Linux下进行C语言编程,Makefile自然是必不可少的,源代码在单个目录下Makefile编写是So,easy!可是当工程量变大,代码分目录管理时,我们该怎么办呢?现在能否编写多目录Makefile,已经标志这一个软件工程师能否胜任大型软件的开发工作。
寡人最近研究一番多目录Makefile编写的规则之后,发现现有帖子不全面,现总结2种编译规则如下,希望能解决你大型工程Makefile管理代码的疑惑,但是在读下面的文章之前需要你有一些Makefile的基础知识,推荐文章底部的书籍1,可以系统的学习Makefile的基础知识。
请注意,前方高能,前方高能!!!!!
多级目录Makefile文件的编写
现在Makefile的管理方式大致有“集中式”,“分布式”2种管理方式,每种方式都有自己的优缺点,你可以根据你的爱好选择一个较为“爽”的来弄。
集中式–单个Makefile统一管理
这种管理方法的基本思想是:去目录化, 管理方式:
扫描->编译->链接
其中扫描,是通过扫描工程中的所有目录,找到所有.c文件,扫描结果是包含相对路径的.c文件,接下来将所有的.c汇总到Makefile中,像单个目录下的Makefile编译规则一样,只是.c文件带了相对路径。
优点是书写简单,方便理解,但是可扩充性差,不适合大型项目的管理。
分布式–多个Makefile分散管理
这中管理方式,那家伙,那是相当高端。引用了函数化编程的基本思想, 管理方式:
调用->调用->...->调用->汇编->链接
一个主Makefile负责启动编译,并调用各级目录下的子Makefile。这种分级的调用关系,使得每个Makefile分工相当明细。 子Makefile管理相对独立的包,汇编生成多个静态链接库。最后子Makefile对多个静态链接库进行连接生成最终的程序。
优点是每个Makefile相对独立,扩充性好,方便管理,但是多个Makefile使得初期创建起来较为繁琐。
参考代码:
git地址:https://github.com/xnzaa/makefile-multi-dir