У меня есть проект, в котором используются библиотеки log4cxx, boost и т. Д., Заголовки которых генерируют множество (повторяющихся) предупреждений. Есть ли способ подавить предупреждения из библиотек включает (например, #include <some-header.h>) или включает из определенных путей? Я хотел бы использовать -Wall и / или -Wextra как обычно в коде проекта, чтобы соответствующая информация не была скрыта. В настоящее время я использую grep для вывода make, но мне бы хотелось чего-нибудь получше.
126
extern "C"
, что приводит к странным ошибкам при связывании C, если вы#include
используете заголовок C ++ в-isystem
пути.Для тех, кто использует CMake, вы можете изменить свои
include_directories
директивы, включив в них символ,SYSTEM
который подавляет предупреждения о таких заголовках.источник
${LIBFOO_USE_FILE}
переменную, которая будет использоваться с командой CMake include () ?easylogging++
и получаю такое же огромное количество предупреждений от,easylogging++.h
даже если папка, в которой он находится, была включена сSYSTEM
опцией.Вы можете использовать прагмы. Например:
источник
gcc
cl
тоже годами обладает способностями ... Иногдаgcc
немного медленно адаптируется.Я нашел уловку. Ибо библиотека включает вместо
-Idir
использования-isystem dir
в make-файле. Затем GCC обрабатывает повышение и т.д., поскольку система включает и игнорирует любые предупреждения от них.источник
#pragma
инструкции для компилятора. вы можете установить что-то перед #include и отключить после.Вы также можете сделать это из командной строки .
Еще одна страница GCC, посвященная отключению предупреждений .
Я бы выбрал вариант использования # pragma в исходном коде, а затем предоставил обоснованную причину (в качестве комментария), почему вы отключаете предупреждения. Это означало бы рассуждения о файлах заголовков.
GCC подходит к этому, классифицируя типы предупреждений. Вы можете классифицировать их как предупреждения или игнорировать. Связанные ранее статьи покажут вам, какие предупреждения могут быть отключены.
Примечание: вы также можете массировать исходный код, чтобы предотвратить определенные предупреждения, используя атрибуты ; однако это очень сильно связывает вас с GCC.
Примечание 2: GCC также использует интерфейс pop / push, который используется в компиляторе Microsoft - Microsoft отключает предупреждения через этот интерфейс. Я предлагаю вам изучить это подробнее, поскольку я не знаю, возможно ли это вообще.
источник
Вы можете попробовать использовать предварительно скомпилированные заголовки . Предупреждения не исчезнут, но, по крайней мере, они не появятся в вашей основной компиляции.
источник
-isystem
, но не забудьте использовать его как при компиляции заголовка, так и в коде)Если вам нужно явно переопределить системный заголовок, вы ограничены прагмами. Вы можете проверить, какие из них вы используете, через
make depend
output.Также см. Диагностику push-pop для gcc> = 4.6
источник
Ставя следующие
отключит предупреждения GCC для всего следующего кода в этом файле.
источник
Для этих предупреждений должны быть причины. Они будут вызваны либо ошибками в вашем коде, который использует библиотеку, либо ошибками в самом коде библиотеки. В первом случае исправьте свой код. Во втором случае либо прекратите использование библиотеки, либо, если это FOSS-код, исправьте его.
источник