最近,折腾了下LINUX下的makefile。对于makefile,各种说法是,makefile是一种指导自动化编译的规则集合。通过它,程序员指定了编译器,源文件,目标文件的编译顺序。极大的提高了编译速度。特别是project有多个源文件时。WINDOWS下,更多的使用IDE,点个按钮就可以完成编译。相比之下,LINUX有一种GEEK的风格。噼里啪啦敲键盘,然后完成编译。
在学习编程的最开始阶段,程序不大,几行,几十行也就结束了,一般都在一个文件中,编译时,输入命令行 gcc 1.c ,如果成功,默认输出a.out。在命令行下输入./a.out,显示执行结果。OK。好像没有什么问题~
但是,不可能总是菜鸟吧?程序不可能总是几十行吧?当几十行变为几百行,几千行,一个源文件变为100个源文件,甚至更多,还这么整不是要累死程序员的节奏?幸好,我们有了makefile这个神器,极大的减轻了我们的重复的体力劳动。只要编写一个makefile,需要编译时,输入make就OK。如果需要重新编译,输入make clean;make,工作量少的不是一点点哦。
假如有3个C文件,2个头文件,命名为main.c,1.c,2.c 1.h 2.h.可执行文件名称x。
那么makefile这么写,将以下文字输入到一个文件中,文件名称makefile。
CC=gcc #指定编译器
OBJECT=main.o 1.o 2.o #目标文件,*.o
TARGET=x #可执行文件
#目标文件生成可执行文件
$(TARGET):$(OBJECT)
$(CC) $(OBJECT) -o $(TARGET) #此行以TAB开始!下同,抱歉,因为在博客环境下,无法打出TAB。
#main.o,注意,加入非标准库 头文件
main.o:main.c 1.h 2.h #编译main.c,
$(CC) -c main.c
#1.o
1.o: 1.c
$(CC) -c 1.c
#2.o
2.o:2.c
$(CC) -c 2.c
#清理编译结果
clean:
rm -rf $(TARGET) $(OBJECT) #删除生成文件,
以后,如果要增加或者删除源文件,记得修改makefile规则,make clean;make就可以了。所以呢,以后编程时,先建立一个makefile,后面需要什么,改makefile,然后make clean;make。等等,待我喝杯水~