makefile与make系列笔记

前言

在介绍makefile和make的具体概念前,我们先通过一个例子来说明makefile和make到底是为解决什么问题而存在的。

假设有一个文件非常多非常复杂的C语言工程demo,那么要编译出可执行程序demo,必须执行以下命令:

# 步骤1:编译主程序模块
$ gcc -o <100个主程序模块的o文件> -c <100个主程序模块的c文件>

# 步骤2:编译功能模块a
$ gcc -o <1000个功能模块a的o文件> <1000个功能模块a的c文件>
$ ar rcs liba.a <1000个功能模块a的o文件>

# 步骤3:编译功能模块b
$ gcc -o <1000个功能模块b的o文件> <1000个功能模块b的c文件>
$ ar rcs libb.a <1000个功能模块b的o文件>

# 步骤4:生成可执行文件demo
$ gcc -o demo <100个主程序模块的o文件> -L. -la -lb

上述例子反映了两个问题:

  1. 上述4个编译步骤中,几乎每个步骤都有亢长的文件名列表需要输入而且有些还是重复的,这种工作枯燥而又费时,且极易因人为疏忽而出现错误;
  2. 假设我们的demo项目每次编译所需的时间都比较长,那么如果我们之前已经成功编译过了我们的demo项目,而此后当我们修改了某些源文件需要更新的demo文件时,理论上我们是不希望也不需要去重新编译整个项目的,我们只需要仅分析其中的依赖关系,仅执行需要重新编译链接的命令,以节省编译时间,但是对于依赖关系非常复杂的工程而言,分析源文件涉及到的依赖关系是个非常复杂且容易出错的过程。

make和makefile的存在正是为了解决上述这两个问题的。
下面为本人精心整理的四篇makefile学习笔记,较为详尽地介绍了make命令的使用和makefile的写法,供大家参考。

makefile学习笔记(一)
makefile学习笔记(二)
makefile学习笔记(三)
makefile学习笔记(四)

发布了18 篇原创文章 · 获赞 46 · 访问量 4281

猜你喜欢

转载自blog.csdn.net/qq_42554780/article/details/104242577