【问题标题】:Why gcc "-MM" option does not generate .d output为什么 gcc “-MM” 选项不生成 .d 输出
【发布时间】:2012-06-22 15:43:01
【问题描述】:

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

【问题讨论】:

    标签: makefile


    【解决方案1】:

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

    没错。你应该设置 CFLAGS 变量来做你想做的事。 Make 在编译 C 文件时自动包含CFLAGS。 (CXXFLAGS 用于 C++。)在您的情况下,您需要添加它来制作 .d 文件。我通常会这样做:

    INCLUDES = -I/home/tempcode/inc
    CFLAGS += $(INCLUDES)
    CXXFLAGS += $(INCLUDES)
    
    debug:
        gcc -MM $(CFLAGS) hello.c
    

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 2010-09-10
      • 2013-11-19
      • 2015-06-14
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 2019-06-11
      • 2022-12-17
      相关资源
      最近更新 更多