我尝试了以下代码树。如果我将头文件hello.h放入“inc”存档,并使用MM选项,我的系统报告即使在makefile中添加vpath命令也找不到hello.h。如果我将hello.h移回hello.c的同一目录,gcc -MM工作正常并成功列出了依赖文件。
如何让gcc自动知道在哪里找到头文件?以下是代码树,“hello.h”放在存档“inc”
中 total 12
-rw-r--r-- 1 root root 101 Jun 22 14:13 hello.c
drwxr-xr-x 2 root root 4096 Jun 22 14:14 inc
-rw-r--r-- 1 root root 139 Jun 22 14:18 makefile
以下是我的makefile内容:
vpath %.h /home/tempcode/inc
hello: hello.o
gcc -o hello hello.o
hello.o: hello.c hello.h
gcc -c hello.c
debug:
gcc -MM hello.c
让我感到困惑的是,如果我像这样直接运行gcc,它会起作用。这是否意味着VPATH或vpath不帮助gcc找到包含路径?如果是这样,我猜vpath变量只能帮助'make'找到头文件但不帮助gcc,我是对的吗?
[root@localhost tempcode]# gcc -MM -I/home/tempcode/inc hello.c
hello.o: hello.c /home/tempcode/inc/hello.h
答案 0 :(得分:1)
这是否意味着VPATH或vpath不帮助gcc找到包含路径?如果是这样,我猜vpath变量只能帮助'make'找到头文件但不帮助gcc,我是对的吗?
这是正确的。您应该设置CFLAGS
变量以执行您想要的操作。编译C文件时自动包含CFLAGS
。 (CXXFLAGS
用于C ++。)在您的情况下,您需要将其添加到.d
个文件中。我通常做这样的事情:
INCLUDES = -I/home/tempcode/inc
CFLAGS += $(INCLUDES)
CXXFLAGS += $(INCLUDES)
debug:
gcc -MM $(CFLAGS) hello.c