3

我正在使用 g++ 开发一个 C++ 项目。我正在使用#pragma消息来打印各种诊断消息(正在编译类的哪些部分等)。起初它很有用,但随着包含链开始增长,它失控了。

当我编译我的任何对象时,我保证会收到至少 3 条类似于以下内容的消息:

In file included from cgCore.h:10:0
                 from cgutCore.h:3
                 from cgutSrvWrapper.h:11
                 from cgutSrv1.h:5
                 from cgutSrv1.cpp:9
XnInterface.h:14:17: note: #pragma message: Compiling XnInterface for SERVER use
 #pragma message "Compiling XnInterface for SERVER use"
                 ^

当我进行完整构建时,我会得到数百个。我想要打印实际的消息 (XnInterface.h:14...),而不是其余的。我真的不在乎它是从哪里包含在这种情况下的,这使得实际的警告很难被发现。

我发现我可以用 禁用最后两行-fno-diagnostics-show-carat,但找不到不打印包含链的选项。

我不想将它们作为系统标头包含在内,-i/INCLUDE因为这样会删除整个消息。是否可以只禁用包含链?g++ 手册页不是为深夜阅读而设计的,所以我承认我可能遗漏了一些东西。

谷歌没有帮助。我想不出一个可以返回甚至相关结果的搜索查询。

来自 XnInterface.h 的相关代码,fwiw:

#ifndef __CGUT_SERVER
...non-server code...
#else
#pragma message "Compiling XnInterface for SERVER use"
...munged server code...
#endif

而且,在相关的说明中,上帝保佑我让 Boost 不高兴。它吐得太厉害了,我不得不用更少的钱来抓住它。其中大部分是“在文件中包含...”

非常感谢任何和所有帮助!

4

1 回答 1

3

参考 GCC 源代码,diagnostic.c函数diagnostic_report_current_module,第 528 行,循环在打印出问题文件的名称后无条件发生。你可以修改它并重建 GCC,否则你就不走运了。

于 2014-03-07T08:06:34.377 回答