【问题标题】:How to configure autotools/gcc to print warnings and errors with the absolute path?如何配置 autotools/gcc 以使用绝对路径打印警告和错误?
【发布时间】:2023-03-18 10:50:01
【问题描述】:

我正在编译一个基于 autotools C 的项目,我收到了一些警告和错误。它们显示如下:

foo.c:123: warning: some message

我希望它们像这样显示:

/full/path/to/foo.c:123: warning: some message

我知道这不能通过 gcc 进行配置,除非将完整的文件路径本身传递给它,所以我想这必须通过 autoconf/automake 进行配置。

这可能吗?如果有,怎么做?

【问题讨论】:

    标签: autotools autoconf automake gcc-warning


    【解决方案1】:

    我不知道该怎么做,并怀疑它无法做到。 但是如果您的更高目标是找到警告引用的文件,使用 Emacs 可能就足够了:

    在顶部源目录中打开一个文件,如C-x C-f configure.ac RET,运行编译:M-x compile RET(可能编辑make 命令)RET。当您在编译缓冲区中看到警告时,请使用 C-x backtick (C-x `) 显示源位置。

    Emacs 通过解析来自make 的“进入目录/foo”和“离开目录/foo”消息来管理这一点,因此您可能想效仿。

    【讨论】:

    • 我使用 Emacs,它就像你说的那样工作。我会将此标记为答案,但如果有人发布更通用的解决方案,我会接受。谢谢
    【解决方案2】:

    这里有一个可能对你有用的技巧。

    可以在Makefile.am中添加以下行

    VPATH = $(abs_srcdir)
    

    这将生成Makefile,它将通过绝对路径引用目录来搜索源目录。反过来,gcc 将接收源文件的绝对路径。

    我不确定这个技巧是否适用于所有版本。在某些版本的 make 中,变量 VPATH 的值被读取为纯文本,并且 make 不会替换 abs_srcdir 的值。

    【讨论】:

      【解决方案3】:

      我认为您可能能够做到这一点,但它可能会导致其他自动工具 make 目标(例如 make dist)出现问题,所以我建议不要这样做。 top_srcdirtop_builddirsrcdirbuilddir 变量有绝对的类似物,以 abs_ 为前缀(例如 abs_top_srcdir)。因此,在使用 gcc 编译它们之前,您可以尝试在源文件前面加上这些前缀。

      我不确定您为什么认为 autotools 应该这样做。如何打印警告/错误是 C 编译器 (gcc) 的功能,而不是 autotools。

      【讨论】:

        【解决方案4】:

        对于树外构建,用于引用源文件的文件名有所不同

        mkdir _build
        cd _build
        ../source-tree/configure --prefix=...
        

        mkdir _build
        cd _build
        $PWD/../source-tree/configure --prefix=...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          • 1970-01-01
          • 2013-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多