Makefile是什么
Makefile本质是一种脚本语言,主要用来管理工程中的源文件,Makefile的好处就是在Makefile文件中描述了源文件之间的编译和其他的关系,并且可以定义一些简单的脚本命令来完成一些复杂的工作.
有很多工具可以解释Makefile文件,例如Linux中的make,VC中的nmake,在一个很大的工程中,如果用Makefile来管理源文件的话,无疑是一个非常好的选择.
Makefile中一些简单的规则
在Makefile中若不及加入任何参数的情况下,默认生成第一个目标文件,若目标文件的依赖文件不存在,则在后续命令中寻找第一个依赖文件的生成命令,若后续的依赖文件也不存在,则递归查找下去,直到找到一个可以执行的命令.
在Makefile中还可指定生成文件中存在的任意一个目标文件,此命令则需要添加需要生成目标文件的参数(生成规则与上条生成规则相同).
Makefile中最基本的语法:
目标 : 依赖文件
(tab)命令 (注:命令签必须为tab,不可用空格替换)
例:
a.out : test.c
gcc test.c -o a.out
添加注释:
#注释内容
简写规则:
$@ 目标文件
$^ 所有依赖文件
$< 第一个依赖文件
例:
#第一个举例可简写为
a.out : test.c
gcc $^ -o $@
#或
a.out : test.c
gcc $< -o $@
在Makefile中还可利用通配符匹配文件.
例:
#若当前目录下只存在test.c 文件,则上个举例可写为
a.out : %.c
gcc $^ -o $@
在Makefile中若要生成的目标文件已经为最新生成的目标文件(判断是否为最新文件的规则为:目标文件的最后更新时间是否大于依赖文件),则不执行当前操作.
.PHONY : 目标(不论目标是否为最新都重新生成)
在Makefile中还可以使用变量来代替一些需要重复进行的操作,可以用一些变量来替代.
例:
#定义变量
变量名 = 文件,命令行内容等
#使用变量规则
$(变量名)
#例
src = test.c
cc = gcc
a.out : $(src)
cc $^ -o $@
#在Makefile中一个变量不知能代替一个文件,也可以代替多个文件
#例如
src = %.c #src为当前目录下所有.c文件
在Makefile中还可以执行一些shell命令,使用方法与变量使用方法相同
#例:
obj = $(shell pwd) #此命令为将当前路径赋值给变量obj
#在Makefile中,变量之间相互赋值规则
变量1 = $(变量2) # 将变量2的内容赋值给变量1
在Makefile中同样存在一些函数可供调用,用法与变量使用方法大致相同
#例
obj = $(addprefix prev name)#为name加前缀prev并赋值给obj
在Makefile中还存在非常多的规则和函数,在这里不做过多解释,本篇文章为新手笔记,如有错误,还望指出.