-isystem for MS Visual Studio C++ Compiler

后端 未结 4 1288
花落未央
花落未央 2021-02-20 06:54

I usually like to have a lot of warnings enabled when programming. However, some libraries contains code that easily causes warnings (.., python, Qt, ..). When compiling with gc

相关标签:
4条回答
  • 2021-02-20 07:16

    As of 2017-08-17 this still seems impossible.

    I added a feature request here:

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

    Update 2018:

    The issue is now closed as fixed and is available in the standard MS VS installation [source]. A blog post from the MS team goes through the new features [here].

    The solution from MS is flexible. You can not only differentiate using paths like you do with --isystem, but for example also by whether you use #include "" or #include <>. The blog post is worth a read to see all the various customization points.

    0 讨论(0)
  • 2021-02-20 07:27

    No clue why MS never picked this up. We can only try voting on https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-s

    0 讨论(0)
  • 2021-02-20 07:31

    This now exists under /experimental:external /external:I system_include_path /external:W0. See https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ for many more details.

    0 讨论(0)
  • 2021-02-20 07:32

    No, MSVC doesn't have an -isystem equivalent.


    look at the output output from cl /? :

    /wd disable warning n

    /we treat warning n as an error

    /wo issue warning n once

    /w set warning level 1-4 for n

    Note that this disables the warnings for your entire project; I remember when using Qt I'd rather change it's main header with the #pragma warning disable and enable at the end again so I could still see all warnings for my own source.

    Edit the author edited his question, updated answer: there is no way to get your code with warnings and Qt code without warnings using compiler flags: how are you going to tell the compiler what is 'your' code?

    Note that the above flags can be applied at file level as well, so this would allow you to disable the warnings for only those files in which you include Qt headers, but that still means you cannot see them for your own code in that files.

    So I stay with the answer above; it is not quite pretty, but I'm pretty sure it's the only way: use #pragma at the beginning and the end of the Qt header(s). Either change the Qt headers (even more ugly), or choose a less invasive way like this:

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

    example "shutuppqt.h"

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

    example "enableallwarnings.h"

    #ifdef MSVC
      #pragma warning ( enable : 4222 ) //or default instead of enable
    #else
      //....
    #endif
    
    0 讨论(0)
提交回复
热议问题