”自动化编译“ make/Makefile

本篇介绍了 linux中项目自动化构建工具----make/Makefile

文章目录

  • 前言
  • 一、Linux中项目自动化工具make
  • 二、使用make/Makefile的意义与原理


前言

一、Linux中项目自动化工具make

1.make可以自动化编辑我们的程序(无论多大的工程只需要一个make指令就可以完成编译)
创建我们需要编写的程序

//test.c
#inlcude<stdio.h>
int main()
{
	printf("测试\n");
	return 0;
}

创建Makefile来完成编写的实现
在这里插入图片描述

上面的文件 test ,它依赖 test.c
此时我们还可以进行编译过程文件的形成
上面的文件 test ,它依赖 test.o
test.o , 它依赖 test.s
test.s , 它依赖 test.i
test. i , 它依赖 test.c
由我们自己编写,如下图可以生成各个阶段

”自动化编译“ make/Makefile_第1张图片

1行:myprocess表示的是我们自己的进程
使用gcc -o test test.c来使用gcc编译器完成程序的编写
3行:红色的.PHONY:用来实现清理功能
例:
在这里插入图片描述

二、使用make/Makefile的意义与原理

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件。
  3. 如果test文件不存在,或是hello所依赖的后面的test.o文件的文件修改时间要比test这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成test这个文件。(刷新原理)
  4. 如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果找到则再根据那一个规则生成test.o文件。(这有点像一个堆栈的过程)
  5. 当然,你的C文件和H文件是存在的啦,于是make会生成 test.o 文件,然后再用 test.o 文件声明make的终极任务,也就是执行文件test了。
  6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标件。
  7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。

原理
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

你可能感兴趣的:(linux,运维,服务器,经验分享)