对Makefile中 VPATH的理解
这个东西很奇怪,明明解释说是用来查找依赖文件的,但是当我在VPATH中设定了 文件路径的时候,gcc命令中只写文件名还是找不到......
这是怎么回事呢?
需要理解下面的东西:
1. VPATH 是用来让 makefile 来找到依赖文件的,这个依赖文件就是指编译目标后面的依赖文件
只要这些编译目标依赖的文件在当前路径或者VPATH指定的路径中存在,就不会报错
2. VPATH 会在 makefile 隐晦规则和 自动化变量 ($> 等) 中生效 , 即需要makefile自己推导的规则中生效
例如编译命令只有目标和依赖文件:
VPATH=source
myhobby.o : myhobby.c
那么myhobby.c 就会在 当前路径和 VPATH指定的路径中查找
并且makefile还会自动推导出编译命令: cc -c -o myhobby.o source/myhobby.c
3. gcc 不会从VPATH指定的路径来查找源文件和依赖文件,gcc只是make里面调用的一个工具而已,不具备自动调用VPATH的能力
例如hello.c 就是放到当前目录source中的:
VPATH=source
gcc source/hello.c myhobby.o -o flash -I header
你要是把gcc中的source去掉,gcc就会报找不到hello.c ,所以对于你自己写的编译命令,一定要把文件路径写清楚
4. gcc -I 是给c 文件 include 的时候查找用的
你要是不写这个编译就会报 include找不到文件
5. make -I 是给 makefile中用来include 其他文件时候用的
你不写 make -I path, 就需要在include时候写完整路径