makefile重要的三个概念:目标 依赖关系 命令

一 make与makefile

make是一个应用程序 1.解析源程序之间的依赖关系 2.根据依赖关系自动维护编译工作 3.执行宿主操作系统中的各种命令 makefile是一个描述文件 1.定义一系列的规则来指定源文件编译的先后顺序 2.拥有特定的语法规则,支持函数定义和函数调用 3.能够直接集成操作系统的各种命令 两者之间的关系 1.makefile中的描述用于指导make程序如何完成工作,make根据makefile中的规则执行命令,最后完成编译输出 关系可以用下图表示 简单的makefile示例以及打印结果 在这个示例中:all是一个目标,echo "hello dandanxiaohai"是生成目标的命令 echo的命令的用处是将字符串打印到终端上,需要注意的是:命令所在的行必须是以Tab键开头

示例改动 从运行的结果我们可以得出 1.一个Makefile中可以定义多个目标 2.调用make命令时,得告诉它我们希望它构建的目标是什么,即要它干什么。当没有指定的具体的目标时,make将以文件中定义的第一个目标作为这次运行的目标。“第一个”目标,也被称为默认的目标 3.当make得到目标后,先找到构建目标的对应规则,然后运行规则中的命令来达到构建目标的目的。目前的Makefile中的每个规则中都只有一条命令,实际上,一个规则中可以根据需要存在多条命令 在echo前加上@可以去掉上面输出结果的第一行输出结果,使阅读起来更方便

二.make编译实例

关系依赖图如下 首先需要建立main.c 与fun.c 对应的makefile如下

hello.out :main.o func.o
	gcc -o hello.out main.o func.o
main.o:main.c
	gcc -o  main.o -c main.c
func.o:func.c
	gcc -o  func.o -c func.c

运行的结果如图所示 小结: 1.makefile用于定义源文件间的依赖关系 2.makefile说明如何编译各个源文件并生成可执行文件 3.makefile中的目标之间存在连续依赖关系 4.依赖存在并且命令执行成功时目标完成的充要条件