-система для компилятора MS Visual Studio C ++ - PullRequest
10 голосов
/ 16 ноября 2009

Мне обычно нравится включать много предупреждений при программировании. Однако некоторые библиотеки содержат код, который легко вызывает предупреждения (.., python, Qt, ..). При компиляции с помощью gcc я могу просто использовать -isystem вместо -I, чтобы отключить это. Как я могу сделать то же самое с компилятором MS? Я знаю о предупреждении #pragma, но мне бы хотелось, чтобы решение не включало специфический для компилятора код повсюду. Я также знаю, что могу отключить определенные предупреждения, но это не то, чего я хочу.

Кстати: isystem должна быть тегом этого вопроса, но мне не разрешили это сделать.

РЕЗЮМЕ: Я хочу видеть все предупреждения из моего кода и no предупреждения из внешнего кода.

Ответы [ 4 ]

6 голосов
/ 18 августа 2017

На 2017-08-17 это все еще кажется невозможным.

Я добавил запрос здесь:

https://developercommunity.visualstudio.com/content/problem/96411/impossible-to-ignore-warnings-from-system-librarie.html

Обновление 2018:

Теперь проблема закрыта как исправленная и доступна в стандартной установке MS VS [ source ]. В блоге команды MS рассказывается о новых возможностях [ здесь ].

Решение от MS является гибким. Вы можете различать не только пути, как вы делаете с --isystem, но также, например, по тому, используете ли вы #include "" или #include <>. Сообщение в блоге стоит прочитать, чтобы увидеть все точки настройки.

И, наконец, предупреждения можно использовать и на платформе MS VS.

1 голос
/ 20 апреля 2018

Это теперь существует под /experimental:external /external:I system_include_path /external:W0. См. https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ для более подробной информации.

1 голос
/ 24 июня 2016

Понятия не имею, почему MS никогда не поднял это. Мы можем попробовать только голосование по https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-s

1 голос
/ 16 ноября 2009

Нет, MSVC не имеет -isystem эквивалента.


посмотрите на выходные данные из cl /? :

/ wd отключить предупреждение n

/ мы рассматриваем предупреждение как ошибку

/ wo выдают предупреждение один раз

/ w установить уровень предупреждения 1-4 для n

Обратите внимание, что это отключает предупреждения для всего вашего проекта; Я помню, что при использовании Qt я предпочел бы изменить его главный заголовок с отключенным предупреждением #pragma и снова включить его в конце, чтобы я мог видеть все предупреждения для своего собственного источника.

Редактировать автор отредактировал свой вопрос, обновил ответ: нет способа получить ваш код с предупреждениями и код Qt без предупреждений, используя флаги компилятора: как вы собираетесь сообщить компилятору, что «ваш» 'код?

Обратите внимание, что вышеупомянутые флаги также могут применяться на уровне файлов, так что это позволит вам отключить предупреждения только для тех файлов, в которые вы включаете заголовки Qt, но что все еще означает, что вы не можете видеть их для вашего собственного кода в этих файлах.

Так что я остаюсь с ответом выше; это не совсем красиво, но я уверен, что это единственный способ: использовать #pragma в начале и в конце заголовка (ов) Qt. Либо измените заголовки Qt (даже более уродливо), либо выберите менее инвазивный способ, подобный этому:

//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"

пример "shutuppqt.h"

#ifdef MSVC
  #pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
  //....
#endif

пример "enableallwarnings.h"

#ifdef MSVC
  #pragma warning ( enable : 4222 ) //or default instead of enable
#else
  //....
#endif
...