博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
makefile之VPATH和vpath的使用
阅读量:4340 次
发布时间:2019-06-07

本文共 1558 字,大约阅读时间需要 5 分钟。

  来自阅读陈皓的

  VPATH变量

    在一些大的工程中,有大量的源文件,我们通常的做法是把这许多的源文件分类,并存放在不同的目录中。所以,当 make 需要去找寻文件的依赖关系时,你可以在文件前加上路径,但最好的方法是把一个路径告诉 make,让 make 在自动去找。Makefile 文件中的特殊变量“VPATH”就是完成这个功能的,如果没有指明这个变量,make 只会在当前的目录中去找寻依赖文件和目标文件。如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。

    VPATH = dir1 : dir2

上面的的定义指定两个目录,“dir1”和“dir2”,make 会按照这个顺序进行搜索。目录由“冒号”分隔。(当然,当前目录永远是最高优先搜索的地方)

  怎么使用呢?

  假设有以下工程,目录数为:

./├── bardir│   ├── bar.c│   └── bar.h├── command.h├── foodir│   ├── foo.c│   └── foo.h├── main.c├── Makefile└── README.md

   main.c中调用了bar.c foo.c中的函数,最直白的makefile

OBJS = main.o foodir/foo.o bardir/bar.oCINCLUDES = -I./foodir -I./bardirCFLAGS = -WallTARGET = test$(TARGET):$(OBJS)	$(CC) $(CFLAGS) $^ -o $@ $(CINCLUDES)	.PHONY:cleanclean:	rm  $(OBJS) $(TARGET)

   查看目录树

./├── bardir│   ├── bar.c│   ├── bar.h│   └── bar.o├── command.h├── foodir│   ├── foo.c│   ├── foo.h│   └── foo.o├── main.c├── main.o├── Makefile├── README.md└── test

   如果模块目录比较深,那么OBJS后面会跟一大堆,这时VPATH变量起到作用了,改进后的makefile

VPATH = ./foodir:./bardir OBJS = foo.o bar.o main.o CINCLUDES = -I./foodir -I./bardir CFLAGS = -Wall $(CINCLUDES) TARGET = test $(TARGET):$(OBJS)     $(CC) $(CFLAGS) $^ -o $@ .PHONY:clean clean:     @-rm -f $(TARGET) $(OBJS)

   再查看目录树:

./├── bardir│   ├── bar.c│   └── bar.h├── bar.o├── command.h├── foodir│   ├── foo.c│   └── foo.h├── foo.o├── main.c├── main.o├── Makefile├── README.md└── test

 对比上一次可以看到子目录下生成的.o文件现在生成在Makefile这一级目录了。需要注意的是:通过VPATH告知文件搜寻路径是告知的make,这利于它隐式推导时的文件搜索,而不是告知的gcc,所以还是得通过-I指定gcc预编译时头文件搜索路径

 

vpath关键字

。。。

 

  

转载于:https://www.cnblogs.com/thammer/p/5533224.html

你可能感兴趣的文章
Linux下安装rabbitmq
查看>>
曹德旺
查看>>
【转】判断点在多边形内(matlab)
查看>>
java基础之集合:List Set Map的概述以及使用场景
查看>>
Python 线程 进程 协程
查看>>
iOS语言中的KVO机制
查看>>
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
查看>>
响应式web设计之CSS3 Media Queries
查看>>
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>