前面的课程讲解了从gcc编译过程到其实践,大家可以看到其实在这些步骤中有些是可以简化编译的,但由于参数多以及项目中文件数量多的原因难免会造成错误甚至是浪费大量的时间在这编译上,为此linux系统中专门也有这个工具:makefile。
其实本质Makefile文件(通常开头是大写M)就是一个shell文件通过指定的规则来编译文件。知识点如下:
makefile工具是通过其规则来执行命令,一般其内容分为宏定义以及命令。简单的宏定义在最后讲解下,这先讲命令格式:
target ... : prerequisites ... command
其中target就是目标文件可以是.o文件也可以是可执行文件;
prerequisites是生成target所需要的依赖文件,可以是代码文件,也可以是目标文件;
command就是makefile执行的命令;
本文就讲解一下makefile工具的使用。
这节课中使用上节课原有的文件calc.c、calc.h、calcmain.c3个文件(不知道请回看),先清空掉其它文件,,再创建Makefile文件,步骤如下:
1>创建Makefile文件,并输入如下内容:
calc:calc.o calcmain.o gcc -Wall calc.o calcmain.o -o calc calcmain.o:calcmain.c gcc -Wall -c calcmain.c -o calcmain.o calc.o:calc.c gcc -Wall -c calc.c -o calc.o
.PHONY:clean
clean: rm calc.o calcmain.o calc
上面代码其中第一行:
calc:calc.o calcmain.o:calc为生成的可执行文件对应规则的target;而calc.o calcmain.o是生成calc文件的依赖文件;
gcc -Wall calc.o calcmain.o -o calc:这就是依赖条件满足执行的命令;
同理calcmain.o:calcmain.c:calcmain.o这个目标文件要依赖于calcmain.c文件,注明:如果单修改了calcmain.c源文件,那么可用make calcmain.o和make calc命令执行生成此目标文件操作后链接生成可执行文件
gcc -Wall -c calcmain.c -o calcmain.o:生成目标文件;
最后clean是伪目标,通常情况下在其前面加上如下防止当前目录有相同的指令:
.PHONY:clean
2>现在这个Makefile文件制作好,直接输入命令make就可以完成编译工作:
make
如果想删除相关生成的文件执行:
make clean
如果单修改了calcmain.c源文件,那么单生成calcmain.o文件,在链接成可执行文件,执行如下:
make clacmain.o make calc
这样在项目文件多的时候就可以省掉很多时间了!这个命令一敲很爽吧,哈哈。。。。。。
EXE=calc OBJECTS=calcmain.o calc.o $(EXE):$(OBJECTS) gcc -Wall $^ -o $EXE calcmain.o:calcmain.c gcc -Wall -c $< -o $@ calc.o:calc.c gcc -Wall -c $< -o $@ clean: rm -f $(EXE) $(OBJECTS)
这样使用一些预定义变量如$^就是所有依赖文件;$<就是依赖的第一个文件;$@就是当前的target对象。这样在文件较多时候就比较好维护了。
第三课 Makefile文件的制作(上),布布扣,bubuko.com
原文:http://www.cnblogs.com/luoliang/p/3852348.html