,,,,,,,,我们在实际的工程项目中,所有的源文件和头文件都放在同一个文件夹中吗?如果是比较小的项目,当然是可以的。但如果是成千上万的源文件,当然必须得分开存放。常用的源码管理方式如下
,,,,,,,,那么下面的makefile能够编译成功吗?
,,,,,,,,我们来试试,编译结果如下
,,,,,,,,那么结果肯定会是这样的,因为我们在makefile中就没有指定路径,它在当前目录下没有找到源文件。接下来我们就得来介绍一个格式如下
,,,,,,,,使对于VAPTH值的处理方式如下
,,,,,,,,下来我们还是以代码为例来进行说明,在上面的makefile基础上进行改写
OBJS :=func.o main.o INC :=公司 SRC :=src VPATH :=,(公司),(SRC)美元 hello.out : $ (obj) ,,,@gcc -o $ @ $ ^ ,,,@echo “Target File ==祝辞,@"美元; $ (obj),, % .o : % .c func.h ,,,@gcc -o @ 美元;-c $ ^
,,,,,,,,我们来编译试试看
,,,,,,,,我么你看到编译还是报的错,原因就是我们在gcc的时候依赖文件中还包含有函数。h,下来我们将最后一行的$ ^改为$ & lt;。再来试试看
,,,,,,,,我们在编译的时候,编译器又报错了,说是找不到函数。h。我们的函数。h文件在公司文件中放着,编译器并不知道去这个文件夹下找,只是在当前文件下进行查找。现在就用到了我们上面说的为特定的编译命令(gcc)独立的指定编译路径。加上CFLAGS:=- $(公司),并将CFLAGS变量加在gcc编译的命令中。再来看看编译结果
,,,,,,,,我们看到已经正确编译了,并且可执行程序也完美运行。看似问题完美的解决了,但其实VPATH也存在一定的问题,当公司文件夹中意外出现源文件(c/cpp文件),那么可能就会产生编译错误。我们如果将函数。c误放在公司文件夹中,这个函数。c文件中打印的是这是公司……看,看会发生什么
,,,,,,,,我们看到输出的竟然会是公司文件中的函数。c的内容,按照预想应该是你好makefile啊。那么这时的解决方案便是利用。语法是在目录中搜索符合模式的规则的格式,格式如下
,,,,,,,,我们再次用vpath来进行设置,看看编译结果是怎样的
,,,,,,,,我们看到已经正确实现了。那么既然有设置这个规则,是否也可以有取消此规则的设置呢?当然有了. .
,,,,,,,,我们来试试,直接在下面加上vpath %。h,代码如下
OBJS :=func.o main.o INC :=公司 SRC :=src CFLAGS :=,小姐;$ (INC) vpath % .h $(公司) vpath % .c $ (SRC) hello.out : $ (obj) ,,,@gcc -o $ @ $ ^ ,,,@echo “Target File ==祝辞,@"美元; vpath % . h $ (obj),, % .o : % .c func.h ,,,@gcc 美元(CFLAGS), -o @ 美元;-c $ & lt;
,,,,,,,,编译结果如下
,,,,,,,,我们看到编译标错了,说找不到函数。h头文件啦。当然找不到了,我们取消了. h头文件的搜索路径了。