Я работаю над проектом C ++ с g ++. я использую #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
потому что тогда все сообщение удалено Можно ли просто отключить цепь включения? Страница man g ++ была не предназначен для чтения поздно ночью, поэтому я признаю, что, возможно, что-то пропустил.
Гугл не помог. Я не мог придумать поисковый запрос, который бы выдал даже связанные результаты.
Соответствующий код из XnInterface.h, fwiw:
#ifndef __CGUT_SERVER
...non-server code...
#else
#pragma message "Compiling XnInterface for SERVER use"...munged server code...
#endif
И, на родственной ноте, не дай Бог, я расстроил Boost. Он сгорел так сильно, что мне пришлось поймать его с меньшими затратами. Большая часть этого была «В файле, включенном из …»
Любая помощь очень ценится!
Ссылаясь на источник GCC, diagnostic.c
функция diagnostic_report_current_module
В строке 528 цикл выполняется безоговорочно после печати имени файла-нарушителя. Вы можете изменить это и восстановить GCC, иначе вам не повезло.
Других решений пока нет …