前言
在正式进入makefile相关知识讲述之前,这里可能需要对makefile本身的应用场景进行一点简单的陈述。如果你在linux环境下使用源码安装软件时,其中一个过程就是执行make命令。make命令本身实际上就是按照makefile中的内容对源码进行编译。那么对于makefile本身我想先总结一下这项技术的特点
- makefile本身只是对编译流程进行规定,简单理解就是有了makefile之后我们只需要通过make命令来执行makefile中定义的编译规则即可完成代码的编译工作
- 如果没有makefile我们可以手动完成源码的编译工作,但是对于复杂的工程项目,如果还是按照手动编译,编译工作本身就需要消耗大量的时间,效率低,使用成本高。其次,对项目进行手动编译的前提是对项目本身的的模块设计以及编译链接过程有详细的了解,这本身又会增加其他人使用该软件的难度。
- makefile本身可以定义多个目标生成过程,开发者可以根据不同的需要设计不同的目标,一些特定的功能只需要存在于特定的目标程序中。而一个常见的特定功能就是测试程序。但是对于一般的软件使用者来说,测试程序又是不需要的。
- makefile支持多线程并发编译,并且会智能重新编译那些修改后的源文件
makefile基础结构
makefile本身内容较多,这里先介绍一些makefile相关的基础概念,通过这些基础概念我们可以更加清晰的了解其功能。
首先,makefile只是一个基础文本类文件,所有文本类编辑器可以直接进行编辑,常见格式如下
targets : pres
command
基础结构是比较容易理解的,targets就是我们的目标文件,pres就是在生成目标文件时的依赖文件,command就是需要执行的命令,对于常见额C语言程序,示例如下
test_makefile:test_makefile.c
gcc -o test_makefile test_makefile.c
可能大家看到这里就明白makefile实际上就是将一些编译过程中的命令写入到文本文件中,当然上面的案例较为简单,仅仅用作展示,后面我会逐步讲解makefile本身所具有的特殊之处