本文章参考自:
https://blog.youkuaiyun.com/dongdong0071/article/details/52040559
https://www.cnblogs.com/wanglog/p/5555669.html
https://www.cnblogs.com/owlman/p/5514724.html
http://www.cnblogs.com/iRidescent-ZONE/p/5975166.html
当在写一个大型项目时,往往会有很多的函数文件,如果只单纯的使用gcc在终端里一个个手动编译怕是谁都不愿意吧。
这时候就需要一个能够按照你设定的规则去编译的工具—makefile。
在不是用makefile时,我们对于一个项目的多个文件,比如a.c,b.c,c.c,编译方法如下
gcc a.c –o a.o //将三个.c文件编译成.o文件
gcc b.c -o b.o
gcc c.c -o c.o
gcc a.o b.o c.o –o all //将三个.o文件编译成一个可执行文件
./all //执行程序
以上例子还算文件少,如果有几十上百个文件,那这样子来编译就不现实了。
或者说,当你修改了其中的一个.c,那么你需要将所有东西都再次编译,修改多了就会让费很多时间。
此时引入makefile
Makefile:自动编译。先将每个.c文件的编译过程提前写在Makefile文件中,在运行程序时,系统直接用make命令使文件自动编译,提高效率。
Makefile文件的书写格式:
vim Makefile
其雏形为:
target : prerequisites
(tab)command //任意的shell 命令
target :要生成的目标文件
prerequisites :生成目标文件所需要的文件
commed:生成目标文件所需要执行的编译命令
实例:
有这几个文件:main.c, print.c, print.h
//helloword 就是我们要生成的目标
helloworld : main.o print.o // main.o print.o是生成此目标的先决条件
gcc -o helloworld main.o print.o //shell命令,最前面的一定是一个tab键
mian.o : mian.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean :
rm helloworld main.o print.o
此时,makefile文件写完,现在只需要在终端输入 make 就可以完成makefile中指定的编译操作
一次搞定,很舒服。
若输入make clean就会删除 helloworld ,main.o, print.o