Makefile的作用:告诉make命令怎样去编译和链接程序。
1、程序的编译与链接:
编译:就是把源文件编译成中间代码,为.obj文件。
链接:把多个.obj文件链接在一块然后执行。主要链接的是函数和全局变量,它关注的是目标文件,当目标文件数量过大时,可以打包一下成库文件lib,(*.a)
2、Makefile的编写规则
在makefile中,主要是依赖关系
目标文件:依赖文件
执行命令
注意:在执行命令前一定要使用TAB空格。
隐形规则:makefile可以自动推导文件以及文件所依赖的关系后面的命令。比如有.o文件,它就会自动把.c文件加到依赖关系,并且gcc –c *.c也会被推导出来。
伪目标:即不是真正的目标,可以把它想象成一个标签,故伪目标无法生成它的依赖关系以及决定它是否执行,只有指明目标它才可以执行。
3、实例
在Linux下建立4个源文件,3个头文件,分别放在src和inc文件夹中,在linux下输入命令tree即可。
问题1:源文件与头文件不在同一目录中,Makefile如何找到.c文件和.h文件?
答:Makefile中有一个命令VPATH,它的作用就是指明路径。
vpath %c src //在src文件夹中找到源文件
VPATH = src //到SRC中去寻找文件
问题2:找到了头文件,为什么还是链接时不了?
makefile的vpath只是负责找到路径,链接是还需要编译选项-I
编译选项 -l (-lpthread)
: 寻找动态链接库文件libpthread.so
(也就是文件名去掉前缀和后缀所代表的库文件,即指定 库 的名称)
Makefile的具体内容
vpath %.c src
vpath %.h inc
CFLAGS = -I inc
SRC = main.c add.c sub.c mod.c
OBJ = $(SRC:.c=.o)
INC = add.h sub.h mod.h
main:$(SRC)
gcc -o main $(OBJ)
main.o:$(INC)
*.o:*.c
gcc $(CFLAGS) -C $<
.PHONY:clean
clean:
rm *.o main
此时,make一下:
就算完成了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)