Makefile 是和 make 命令一块儿配合使用的.spa
不少大型项目的编译都是经过 Makefile 来组织的, 若是没有 Makefile, 那不少项目中各类库和代码之间的依赖关系不知会多复杂.命令行
Makefile的组织流程的能力如此之强, 不只能够用来编译项目, 还能够用来组织咱们平时的一些平常操做. 这个须要你们发挥本身的想象力.3d
长话短说,咱们直接来实战下:code
首先咱们建立个c文件和h文件:对象
main.cblog
#include <stdio.h> #include "fun.h"
int main() { fun(); return 0; }
fun.h自动化
void fun() { printf("hello world!\n"); }
下面就是来对makefile进行编写:io
hello:main.o cc -o hello main.o main.o:main.c fun.h cc -c main.c
.PHONY: hello clean
clean: rm hello main.o
hello:你须要生成的目标文件编译
main.o:属于前置条件class
cc -o hello main.o:属于命令
下面代码也相似
clean:属于“伪目标”,主要就是用来删除对象文件
可是,若是当前目录中,正好有一个文件叫作clean或者hello,那么这个命令不会执行。由于Make发现clean文件已经存在,就认为没有必要从新构建了,就不会执行指定的rm命令。
为了不这种状况,能够明确声明clean和hello是"伪目标",写法以下。
.PHONY: hello clean
下面咱们进行编译:
在命令行写入:make
能够发现,目标文件已经生成
而后咱们继续。。。。
发现成功了。。美滋滋
若是文件很是多,咱们能够统一编写以下的makefile文件:
hello:main.o gcc -o $@ $^ .c.o: gcc -c $? .PHONY: hello clean clean: rm hello *.o
下面是全部的自动化变量及其说明: