源问题链接:https://bbs.csdn.net/topics/380178411
问题:
我的文件目录结构是:
./
makefile
header
globe.h
src
main.c
现在我写的简单makefile的一部分是:
#开始
vpath %.c ./src
vpath %.h ./header
main.o:main.c globe.h
.PHONY clean
clean:
-rm *.o
#结束
我在当前目录当中用make main.o命令测试vpath,结果make的自动推导出:cc -c -o main.o ./src/main.c 但是却提示找不到globe.h,我的理解是既然make自动推导出现了main.c的位置,那么没有理由找不到globe.h啊。同时,如果生成main.o的动作不用make自动推导,自己添加shell命令:gcc -c -o main.o main.c globe.h,结果显示main.c和globe.h都找不到了....
怎么回事啊!请各位不吝赐教,谢谢!
解答:
你make的时候提示找不到h文件,不是make命令找不到h文件。而是make找到了h文件和c文件,但gcc在编译c文件时,链接不到那个h文件。因为你没有加-I选项指定h文件的目录,所以gcc编译默认在当前c文件的目录下查找,查不到h文件,所以提示出错。这样说你明白了?
你后面说到用shell命令,两个都查不到了,那肯定是这样啊。gcc命令默认在当前目录下查找c文件和h文件,但你两个文件都不在当前目录下,是在当前目录下的文件夹里。
我的理解是:如果makefile中的编译命令应该是 gcc ./src/main.c -I ./header