makefile的作用:简化编译的过程,通过脚本来执行编译命令
1、注释:‘#’开头:
如: #这是一个注释
2、执行过程,从上往下,以一个tab开头的才是需要执行的命令,没有的则是一个make的脚本语句
如:

第一行main表示目标文件,main.o,sub.o 表示依赖文件
3、变量
(1)自定义变量

和一般脚本语言类型,声明了一个MOBJ变量,使用$(MOBJ)的方式来使用
(2)预定义变量
即make中默认含有的一些变量,常用的有CFLAGS(用来指明参数)
CC(用来指明编译器)

(3)自动变量
常用的有
<表示第一个依赖项
^ 表示所有不重复的依赖文件

4、伪目标:
依赖项为空的目标
如

亦可以在前增加.PHONY:clean等声明,用以区分存在同名文件的情况。
5、其他
用@屏蔽某行执行时的输出信息

执行时不会显示该行命令
6、嵌套,包含
层级引用,先编译完依赖项再编译,一层一层递归,故makefile也应该这样组织。
通过include dir/makefile包含
嵌套???(保留)
7、条件编译

???有问题,保留待定
网友评论