使中的路径搜索(十二)

  

,,,,,,,,我们在实际的工程项目中,所有的源文件和头文件都放在同一个文件夹中吗?如果是比较小的项目,当然是可以的。但如果是成千上万的源文件,当然必须得分开存放。常用的源码管理方式如下

爸械穆肪端阉?十二)"

,,,,,,,,那么下面的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头文件的搜索路径了。

使中的路径搜索(十二)