如何正确使用Makefile的vpath?配置后找不到cpp文件如何解决
问题根因
- 第一版带vpath报错的核心原因:
vpath是make工具自身用来查找依赖文件的配置,不会传递给g编译器。你写的编译规则没有将cutest.cpp列为目标依赖,make不会触发vpath搜索逻辑,直接把命令里写死的cutest.cpp传给g,g++只会在当前工作目录查找文件,自然找不到。 - 第二版修改后仍然报错的原因:你在添加依赖的同时删除了
vpath配置,make不知道要去../../../raven-set目录查找cutest.cpp,因此会提示没有规则生成该依赖。
正确配置
把vpath配置和带依赖的规则结合即可,正确写法如下:
# 配置.cpp文件的搜索路径 vpath %.cpp ../../../raven-set # .o文件输出目录 ODIR=./obj $(ODIR)/cutest.o : cutest.cpp g++ -o $@ -c $<
运行逻辑说明
- make发现
$(ODIR)/cutest.o依赖cutest.cpp,先在当前目录查找该文件,找不到就触发vpath规则,到../../../raven-set目录找到cutest.cpp - 自动变量
$<会自动替换为make找到的cutest.cpp完整路径,$@会自动替换为目标文件./obj/cutest.o的路径 - g++拿到的是完整路径的源文件参数,不会再报找不到文件的错误
内容的提问来源于stack exchange,提问作者ravenspoint
相关产品推荐
相关产品推荐

