前言
在 Liunx 平台下,我们更注重编译器对项目的编译过程,因为在 Windows 平台下有大量的 IDE 供我们使用,以至于大量的程序猿不知道自己写的代码是怎么在我们的物理机上运行。
如果你对你的代码是如何在物理机上运行的,那么你大可跳转到 Liunx之C/C++编译流程解析
该文章只记录Makefile的基本格式,和基本语法,如果这使你觉得乏味,那么你或许对以下内容有兴趣:
- Liunx之编译脚本Makefile一层
- Liunx之编译脚本Makefile二层
- Liunx之编译脚本Makefile三层
- Liunx之编译脚本Makefile四层
- Liunx之编译脚本Makefile五层
- Liunx之编译脚本Makefile终章
提醒
大可不必强迫自己去做一些伤元气的事,或者写一些伤元气的代码。一切为了部落,呼哈~~
目录
Makefile之介绍
* 警告:
li > 在Makefile中的命令,必须要以[Tab]键开始!!!
* 书写格式:
li > Makefile
li > makefile
* 定义:
li > 告诉make维护一个大型程序,该做什么。Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。
li > Makefile是一个文本形式的数据库文件,其中包含一些规则来告诉make处理哪些文件以及如何处理这些文件。这些规则主要是描述哪些文件(称为target目标文
件,不要和编译时产生的目标文件相混淆)是从哪些别的文件(称为dependency依赖文件)中产生的,以及用什么命令(command)来执行这个过程。
* Makefile 的组成:
li > 显式规则,显式规则说明了如何生成一个或多个目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。
li > 隐式规则,由于make有自动推导的功能,所以隐式规则可以让我们比较粗糙地简略地书写Makefile,这是由make支持的。
li > 变量定义,在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用
位置上。
li > 文件指示,其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部
分,就像C语言中的预编译#if一样。
li > 注释,和UNIX的Shell脚本一样Makefile中只有行注释, 其注释是用 '#' 字符,这个就像C/C++中的 '//' 或者 '/*'。
* Makefile使用方法:
li > make,执行make命令时,会对磁盘上的文件进行检查,如果目标文件的生成或被改动时的时间至少比它的一个依赖文件还旧的话,make就执行相应的命令,以更新
目标文件。目标文件不一定是最后的可执行文件,可以是任何一个中间文件并可以作为其他目标文件的依赖文件。
* Makefile使用方法扩展: 可以自定义伪命令,如 install、clean、debug、relese等
li > make install
li > make clean
li > make debug
li > make relese
Makefile之基本规则
/*
li > 一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如'clean'
li > 一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件
li > 一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符
# 以下例子诠释了以上内容
#
# 目标 : 依赖文件
# 命令
#
target: main.o
gcc -o target main.o
main.o: main.c
gcc -c main.c -o main.o
clean:
rm -rf *.o target
*/
作者:
怪小子
Github:
https://github.com/MrSunHua
邮箱:sh4a01@163.com
本文版权归作者和博客园共有,欢迎转载,如文章有版权冲突或者有更好的见解及建议,还望联系博主讨论并修改。