1.什么是工程?
一个工程由多个源文件 + 其他文件(图片 + 头文件 + 脚本文件)
2.工程管理器的作用:编译多个源文件,实现自动编译
如果没有工程管理器 —— gcc + 所有源文件 -o 可执行文件
3.make依赖于makefile文件
4.makefile文件是一种脚本文件(批处理),存在相关语法
makefile语法
三要素:目标、依赖、命令
目标:最终生成的文件
依赖:生成目标时所需要的文件
命令:生成目标时,需要执行的命令
格式:
目标:依赖
tab 命令
定义伪目标(真目标会生成对应文件,伪目标则不会)
.PHONY:伪目标名
伪目标名:
命令
@gcc hello.c -o hello //在命令前加@可以取消回显(即不将命令显示出来)
echo hello //输出hello,echo相当于C语言中的print
#gcc hello.c -o hello //将该行注释(makefile中注释用#)
内置变量:
$@:表示目标文件的名称,包含扩展名
$^:表示所有的依赖文件,以空格隔开,不重复
$<:表示第一个依赖文件的名称
$+:表示所有的依赖文件,空格隔开,可以重复
$*:表示目标文件的名称,不包含扩展名
$?:依赖项中,所有比目标文件新的依赖文件
当前目录有多个makefile时:
make -f Makefile //可以这样指定用某个makefile
注:make会记录文件的时间,如果文件没修改,时间没变则不会再次编译(可执行文件没有了,也会再次编译。
makefile能实现自动编译,但是编译速度比较慢。
执行顺序
1.makefile是从第一个目标体开始执行的
2.make + 目标体:从对应的目标体执行(如果目标体后面依赖的文件是一个目标的话,先执行依赖对应的目标,再执行目标体的命令)
多级目录下的makefile
多级目录下的makefile:
1.顶层makefile:总控makefile
2.子目录makefile:功能makefile
3.scripts目录makefile:头文件makefile
查看顺序:3 — 1 — 2
总控makefile:进入各个功能子目录下执行make命令,将各个子目录下的.o文件链接生成可执行文件
功能makefile:将当前目录下的.c文件编译生成.o文件
头文件makefile:定义一些变量