makefile专题:make中的路径搜索

关键词:源码管理方式、VPATH、make对于VPATH值的处理方式、vpathvpath的取消搜索规则

1. 常用的源码管理方式

makefile专题:make中的路径搜索_第1张图片

项目中的makefile必须能够正确的定位源文件和依赖文件,最终编译产生可执行程序

2. 特殊的预定义变量VPATH

  • VPATH变量的值用于指示make如何查找文件
  • 不同文件夹可作为VPATH的值同时出现
  • 文件夹的名字之间需要使用分隔符进行区分
    makefile专题:make中的路径搜索_第2张图片

3. make对于VPATH值的处理方式

  • 当前文件夹找不到需要的文件时VPATH会被使用
  • make会在VPATH指定的文件夹中依次搜索文件
  • 当多个文件夹存在同名文件时,选择第一次搜索到的文件
    注意事项:
    * VPATH只能决定make的搜索路径,无法决定命令的搜索路径
    * 对于特定的编译命令(gcc),需要 独立指定编译搜索路径
    makefile专题:make中的路径搜索_第3张图片

OBJS := func.o main.o
INC := inc
SRC := src
VPATH := $(INC) $(SRC)
CFLAGS := -I $(INC)

hello.out : $(OBJS)
    @gcc -o $@ $^ 
    @echo "Target File ==> $@"

$(OBJS) : %.o : %.c func.h
    @gcc $(CFLAGS) -o $@ -c $<
`VPATH`存在的问题: 当`inc`文件夹中**意外出现源文件**(C/Cpp文件),那么可能产生编译错误! 替换方案:使用`vpath`关键词(全小写):**为不同类型的文件指定不同的搜索路径** 语法:在Directory中搜索符合Pattern的规则文件 ![](http://upload-images.jianshu.io/upload_images/5600819-342f5ed98127c4b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

OBJS := func.o main.o
INC := inc
SRC := src
CFLAGS := -I $(INC)

#  修改VPATH存在的问题 使用vpath
vpath %.h $(INC)
vpath %.c $(SRC)

hello.out : $(OBJS)
    @gcc -o $@ $^ 
    @echo "Target File ==> $@"

$(OBJS) : %.o : %.c func.h
    @gcc $(CFLAGS) -o $@ -c $<

4. vpath的取消搜索规则

1) 取消已经设置的某个搜索规则:`vpath Pattern` ![](http://upload-images.jianshu.io/upload_images/5600819-e7b3bc3a78946f57.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2)取消所有已经设置的规则: `vpath`

5. 小结

  • VPATH变量用于指示make如何查找文件
  • make会在VPATH指定的文件夹中依次搜索文件
  • vpath关键字可以为不同类型的文件指定不同的搜索路径
  • vpathVPATH更灵活易用,可动态设置/取消搜索路径

声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件《专业嵌入式软件开发》所有!

你可能感兴趣的:(makefile专题:make中的路径搜索)