为什么gcc“-MM”选项不生成.d输出

时间:2012-06-22 15:43:01

标签: makefile

我尝试了以下代码树。如果我将头文件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

1 个答案:

答案 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