什么是 makefile?
makefile是一套编译规则,关系到整个工程,方便于大型项目,makefile 带来的好处就是——“自动化编译”,固化了源代码之间的关系,只要写好,那么只需要一个 make 命令(调用make命令就会去找makefile文件进行编译),整个工程完全自动编译,极大的提高了软件开发的效率。
默认make命令的文件可以命名为:makefile Makefile GNUmakefile
若想任意命名时,加上make -f 任意命名的文件名
makefile文件的规则:
目标:依赖关系
命令
目标:一般就是make命令后面可以所跟的目标,eg make install ,目标就是install
依赖关系:就是实现目标必须先要完成的事情
命令:任意的shell命令,命令前可以加@表示不输出命令本身,默认或输出命令本身,且命令前必须是至少一个tab键
执行make 相当于执行makefile文件中的第一条规则,且在一个目录下执行make调用的是本目录的makefile文件,不同目录下make的内容不同
make决定编译的要素:时间,会比较二进制文件(执行文件)跟源代码文件的时间,如果源码时间新,则必须重新编译
内置变量:
$@:表示规则中的目标文件集。
$%:仅当目标是函数库文件中,表示规则中的目标成员名。
$<:依赖目标中的第一个目标名字。
$^:所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
$+:这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。
$?:所有比目标新的依赖目标的集合。以空格分隔。
一个简单的例子:
例子上shell表示的makefile中的一个内置函数,$()调用变量,.PHONY表示makefile中的伪目标。