Linux项目自动化构建工具---make/makefile

背景

   1. 会不会写makefile,从侧面说明了一个人是否具备完成大型工程的能力。
   2. 一个工程的源文件不计其数,其按类型,功能,模块分别放在若干个目录里,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要重新编译,甚至于执行更复杂的功能。
   3. makefile的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程就会完全自动编译,极大的提高了软件的开发效率。
   4. make是一个命令工具,是一个解释makefile中指令的工具。
   5. make是一条命令,makefile是一个文件。

makefile

  makefile是一个不普通的普通文件,所谓不普通指的是makefile中记录的是一系列的编译规则,当我们写完一个程序,操作系统有一个命令叫make,当我们执行make命令,那么make这个程序就会到当前目录下找makefile文件,然后一步一步的解释执行makefile中记录的编译规则,最终通过这些编译规则,完成整个项目的编译。
makefile编写规则:

|生成文件:依赖文件
|[\t] 为了完成生成文件的生成,所要执行的命令。
main:main.c
	gcc main.c -o main

  1. makefile文件编写完毕,保存并退出后,敲击make命令,make这个命令所对应的程序会在当前目录下去寻找makefile文件,按着makefile中记录的编译规则完成最终的项目编译。
  因此makefile文件只能叫makefile/Makefile
  2. makefile会记录源文件和程序文件的时间信息,如果源文件的最后一次修改时间是在程序文件之后,那么就会重新编译程序,否则将报告程序是最新的,不会重新编译。
在这里插入图片描述
  伪对象
   .PHONY叫声明伪对象。伪对象代表每次都需要重新生成,即使源文件不是最新的。
在这里插入图片描述
  3. 若想使用makefile编译两条源文件(mian.c、child.c),我们会发现make指令后,只生成了一个对象,执行完第一个生成对象所要执行的命令就退出了,不会再生成第二个对象。
  如果makefile有多个要生成的对象(mian、child……),那么就需要在最上边定义一个对象(eg:all),将要生成的对象都作为这个函数的依赖对象。
在这里插入图片描述
  4.makefile中预定义变量。
   makefile中$符用于使用一个变量。

$@                         冒号左边要生成的对象
$^                         冒号右边所有的依赖对象
$<                         冒号右边依赖对象的第一个

在这里插入图片描述

  5.make也可以指定要生成的对象。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhao_miao/article/details/82767007