为什么用了vpath还是提示找不到文件

xiaoxiao2021-02-27  231

在makefile中,利用vpath和VPATH可以指定makefile中文件的目录。说说我在学习过程中遇到的问题吧。直接贴图把:

headers makefile sources

这是我当前目录的三个文件夹,分别存放头文件、makefile、源文件。

第一种问题:

=====Makefile=====

vpath %.h ../headers vpath %.c ../sources obj = good.o hello.o test1.o test1: $(obj) gcc -o test1 $(obj) test1.o:test1.c hello.h good.h gcc -c test1.c good.o:good.c good.h gcc -c good.c hello.o: hello.c hello.h gcc -c hello.c .PHONY: clean clean: -rm test1.o good.o hello.o

=====报错=====

gcc -c good.c gcc: 错误: good.c:没有那个文件或目录 gcc: 致命错误: 没有输入文件

=====理解=====

在gcc中直接用了good.c,make在分析依赖文件利用了vpath提供的路径,但是对于gcc直接使用good.c,是无法识别并找到的。因此提示没有那个文件。

第二种问题:

=====Makefile=====

vpath %.h ../headers vpath %.c ../sources obj = good.o hello.o test1.o test1: $(obj) gcc -o test1 $(obj) test1.o:hello.h good.h good.o:good.h hello.o: hello.h .PHONY: clean clean: -rm test1.o good.o hello.o

=====报错=====

cc    -c -o good.o ../sources/good.c ../sources/good.c:2:18: 致命错误: good.h:没有那个文件或目录

=====理解=====

这次是通过make自动推导依赖关系,自动找到文件路径,并自动生成cc命令。可以看到执行的命令中包含了good.c正确的路径,因此不在提示找不到good.c的文件了。但是这次却提示找不到good.h文件。因为我在good.c中include了good.h文件,但是对于自动生成的cc命令中并没有加入这个依赖关系,因此提示出错。

第三次不是问题,终于正确啦!

=====Makefile=====

vpath %.h ../headers vpath %.c ../sources obj = good.o hello.o test1.o test1: $(obj) gcc -o test1 $(obj) test1.o:test1.c hello.h good.h gcc -c $< -I ../headers good.o:good.c good.h gcc -c $< -I ../headers hello.o:hello.c hello.h gcc -c $< -I ../headers .PHONY: clean clean: -rm test1.o good.o hello.o

=====正确=====

gcc -c ../sources/good.c -I ../headers gcc -c ../sources/hello.c -I ../headers gcc -c ../sources/test1.c -I ../headers gcc -o test1 good.o hello.o test1.o

=====理解=====

对于找不到的.h文件,利用gcc命令的-I来说明。这样就可以正确执行来。对于命令中的$<,是一种自动变量(自己还是没弄太懂),但是可以发现make自动将其转化成了正确的路径及文件名。

转载请注明原文地址: https://www.6miu.com/read-7188.html

最新回复(0)