如何配置 autotools/gcc 以使用绝对路径打印警告和错误?

Posted

技术标签:

【中文标题】如何配置 autotools/gcc 以使用绝对路径打印警告和错误?【英文标题】:How to configure autotools/gcc to print warnings and errors with the absolute path? 【发布时间】:2013-09-03 04:21:08 【问题描述】:

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

foo.c:123: warning: some message

我希望它们像这样显示:

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

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

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

【问题讨论】:

【参考方案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=...

【讨论】:

以上是关于如何配置 autotools/gcc 以使用绝对路径打印警告和错误?的主要内容,如果未能解决你的问题,请参考以下文章

三菱PLC FX3U如何读取多个增量编码器?

如何配置单臂路

如何使用 TortoiseHg 2.0.3 和 Beyond Compare 3.2.4 进行 3 路合并

如何使用Python以跨平台方式检查路径是绝对路径还是相对路径?

相对路径和绝对路径

如何强制iPad / iPhone Safari使用旧版本的Webkit?