makefile专题17:make中的路径搜索(上)

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

1. 常用的源码管理方式

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

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

2. 特殊的预定义变量VPATH

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

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

  • 当前文件夹找不到需要的文件时VPATH会被使用
  • make会在VPATH指定的文件夹中依次搜索文件
  • 当多个文件夹存在同名文件时,选择第一次搜索到的文件

注意事项:

  • VPATH只能决定make的搜索路径,无法决定命令的搜索路径
  • 对于特定的编译命令(gcc),需要独立指定编译搜索路径
    makefile专题17:make中的路径搜索(上)_第3张图片

OBJS := func.o main.o
CC := gcc
INC := inc
SRC := src
VPATH := $(INC) $(SRC)
# 为编译选项指定路径
CFLAGS := -I $(INC)

hello.out : $(OBJS)
    @$(CC) -o $@ $^
    @echo "Target File ==> $@"
    
# 为gcc命令指定编译搜索路径
$(OBJS) : %.o : %.c  func.h
    @$(CC) $(CFLAGS) -o $@ -c $<

VPATH存在的问题:
inc文件夹中意外出现源文件(C/Cpp文件),那么可能产生编译错误!
替换方案:使用vpath关键词(全小写):为不同类型的文件指定不同的搜索路径
语法:在Directory中搜索符合Pattern的规则文件

makefile专题17:make中的路径搜索(上)_第4张图片


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

2)取消所有已经设置的规则: vpath

5. 小结

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

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

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