如何配置 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_srcdir
、top_builddir
、srcdir
和 builddir
变量有绝对的类似物,以 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 以使用绝对路径打印警告和错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 TortoiseHg 2.0.3 和 Beyond Compare 3.2.4 进行 3 路合并