-isystem для компилятора MS Visual Studio C++
-
20-09-2019 - |
Вопрос
Обычно мне нравится включать много предупреждений при программировании.Однако некоторые библиотеки содержат код, который легко вызывает предупреждения (.., python, Qt, ..).При компиляции с помощью gcc я могу просто использовать -isystem вместо -I, чтобы отключить это.Как я могу сделать то же самое с компилятором MS?Я знаю о предупреждении #pragma, но мне хотелось бы найти решение, которое не задействует повсюду код, специфичный для компилятора.Я также знаю, что могу отключить определенные предупреждения, но это тоже не то, чего я хочу.
КСТАТИ:isystem должен быть тегом этого вопроса, но мне не разрешили это сделать..
КРАТКОЕ СОДЕРЖАНИЕ:Я хочу увидеть все предупреждения из моего кода и нет предупреждения из внешнего кода.
Решение
По состоянию на 17 августа 2017 г. это все еще кажется невозможным.
Я добавил запрос функции здесь:
Обновление 2018 года:
Проблема теперь закрыта как исправленная и доступна в стандартной установке MS VS [источник].Сообщение в блоге команды MS посвящено новым функциям [здесь].
Решение от MS является гибким.Вы можете не только различать пути, как вы это делаете с --isystem
, но, например, и от того, используете ли вы #include ""
или #include <>
.Стоит прочитать этот пост в блоге, чтобы увидеть все различные возможности настройки.
Наконец, предупреждения можно использовать и на платформе MS VS.
Другие советы
Сейчас это существует под /experimental:external /external:I system_include_path /external:W0
.Видеть https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ для получения более подробной информации.
Понятия не имею, почему MS никогда не подхватила это.Мы можем только попробовать проголосовать за https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-s
Нет, 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