禁用“在文件中包含”g ++消息

时间:2014-03-07 07:58:56

标签: c++ c++11 pragma g++4.8

我正在使用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。它如此刻苦,我必须少花钱。其中大部分是“在文件中包括......”

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

1 个答案:

答案 0 :(得分:3)

参考GCC源diagnostic.c,函数diagnostic_report_current_module,第528行,在打印违规文件的名称后无条件地发生循环。你可以修改它并重建GCC,否则你运气不好。