makefile(07) _路径搜索

  

17.使中的路径搜索_上

  

17.0。实验素材

  

源文件位于:src目录下
源文件:c

  
 <代码> # include & lt; stdio.h>
  # include“func.h”
  
  int main ()
  {
  foo ();
  
  返回0;
  } 
  

源文件:func.c

  
 <代码> # include & lt; stdio.h>
  # include“func.h”
  
  空白foo ()
  {
  printf (" void foo (): % s \ n”,“你好,D.T.软件…”);
  }
   之前
  

头文件位于:公司目录下
头文件func.c

  
 <代码>的ifndef FUNC_H
  #定义FUNC_H
  
  空白foo ();
  
  # endif
   之前
  

17.1。工程源码组织方式

  

问题:实际的工程项目中,所有的源文件和头文件都放在一个文件夹吗?
实际的工程中,源码和头文件都是按照模块划分的,举例如下:
 makefile(07) _路径搜索”> <br/>项目中的makefile必须能够正确的定位源文件和依赖文件,最终编译产生可执行程序。<br/>实验1:<br/>当源码组织目录如下时,下面的makefile能够编译成功吗? <br/> <img src=

  
 <代码> obj:=函数。o main.o
  
  你好。:$ (obj)
  @gcc - o $ @ $ ^
  目标文件==比@echo”;$ @”
  
  $ (obj): %。o: %。c func.h
  @gcc - o - c $ $ @ & lt;  
  

编译结果:
 makefile(07) _路径搜索”> <br/>由于让默认只会在makefile所在的文件家去查找源文件和头文件,所以自然会导致编译报错。</p>
  <h3> 17.2。预定义变量VPATH </h3>
  <p> VPATH变量的值用于指示让如何查找文件,不同文件夹可以作为VPATH的值同时出现,可以使用空格,冒号,分号这样的分隔符进行分隔,如VPATH:=<br/> src公司实验2:源码目录如下(注意这里存在两个同名的C文件)、下面的makefile编译结果如何? <br/> <img src=

  
 <代码> obj:=函数。o main.o
  公司:=公司
  SRC:=SRC
  VPATH:=(INC) (SRC)美元
  
  你好。:$ (obj)
  @gcc - o $ @ $ ^
  目标文件==比@echo”;$ @”
  
  $ (obj): %。o: %。c func.h
  @gcc - o - c $ $ @ & lt;  
  

编译结果:
 makefile(07) _路径搜索”> <br/>原因:VPATH只能决定作的搜索路径,无法决定命令的搜索路径,对特定编译命令(gcc),需要独立指定编译搜索路径。<br/> <img src=makefile(07) _路径搜索