Я компилирую с GCC в Linux, но CMake достаточно любезен, чтобы создать Clang-совместимую базу данных компиляции.Это означает, что я могу запускать на своей базе кода причудливые современные инструменты на основе Clang, и эти инструменты отлично знают, как должен создаваться каждый файл (флаги, определения, пути и т. Д.). Пока все хорошо.
Но сегодня статический анализ на основе Clang в моей IDE начал показывать предупреждение, специфичное для Clang.Я не думаю, что для моего вопроса особенно важно, какое это предупреждение, но оно было warning: disabled expansion of recursive macro
, сгенерировано -Wdisabled-macro-expansion
.Этот конкретный макрос предоставлен третьей стороной, поэтому исправление предупреждения не является вариантом, но я хотел бы подавить его, поскольку это происходит несколько раз в рассматриваемом файле.
С чем я борюськак подавить предупреждение в инструментах анализа на основе Clang, не вызывая новых предупреждений в сборке GCC.
- Добавление
#pragma clang diagnostic ignored "-Wdisabled-macro-expansion"
подавляет предупреждение для инструментов Clang, но заставляет GCC выдавать warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas]
. - Аналогично, добавление
#pragma GCC diagnostic ignored "-Wdisabled-macro-expansion"
подавляет предупреждение Clang (поскольку Clang пытается быть совместимым с диагностикой GCC), но заставляет GCC выдавать warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]
. - Оборачивая любой из вышеперечисленных с
#ifdef __clang__
делает GCC счастливым, но не подавляет предупреждение Clang, потому что инструмент достаточно умен, чтобы знать, что код компилируется не с __clang__
, а с __GNUC__
.
IsЕсть ли способ сделать диагностику #pragma
видимой для инструментов Clang, но не для GCC?