1

我尝试了以下代码树。如果我将头文件 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 变量只能帮助“制作”找到头文件,但对 gcc 没有帮助,对吗?

    [root@localhost tempcode]# gcc -MM -I/home/tempcode/inc hello.c
    hello.o: hello.c /home/tempcode/inc/hello.h
4

1 回答 1

1

这是否意味着 VPATH 或 vpath 不能帮助 gcc 找到包含路径?如果是这样,我猜 vpath 变量只能帮助“制作”找到头文件,但对 gcc 没有帮助,对吗?

那是对的。你应该设置CFLAGS变量来做你想做的事。MakeCFLAGS在编译 C 文件时自动包含。(CXXFLAGS对于 C++。)在您的情况下,您需要将其添加到.d文件中。我通常会这样做:

INCLUDES = -I/home/tempcode/inc
CFLAGS += $(INCLUDES)
CXXFLAGS += $(INCLUDES)

debug:
    gcc -MM $(CFLAGS) hello.c
于 2012-06-22T16:01:55.253 回答