当源⽂件与头⽂件不在同⼀个⽬录下的Makefile的编写Makefile的作⽤:告诉make命令怎样去编译和链接程序。
makefile phony1、程序的编译与链接:
编译:就是把源⽂件编译成中间代码,为.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的具体内容
1vpath %.c src
2vpath %.h inc
3
4CFLAGS = -I inc
5
6SRC = main.c add.c sub.c mod.c 7OBJ = $(SRC:.c=.o)
8INC = add.h sub.h mod.h
9main:$(SRC)
10 gcc -o main $(OBJ)
11
12main.o:$(INC)
13
14*.o:*.c
15 gcc $(CFLAGS) -C $<
16
17.PHONY:clean
18clean:
19 rm *.o main
此时,make⼀下:
就算完成了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论