> I compile my project on -Weverything with some warnings disabled > (bad case of OCD I guess)
I try to build with as many warnings enabled as possible and -Werror on as well, so I'm very much a fan of asking the compiler to be strict. The issue I mentioned above though cost me a lot of debugging time - and I'm someone who is fairly experienced with the language, tooling and Qt. Unfortunately marking something as a system header is a sledgehammer - it suppresses warnings in both non-generic code where the compiled code is independent of the context in which it is used but also in macros and templates where the compiled code is a combination of your own code and the code in the headers. > . This is obviously not possible, > as many warnings are just warnings and Qt is complicated enough to use many > non-obvious constructs. Do you have or could you get any stats on what warnings are remaining and with what frequency? When I disabled Qt warnings the main issue was that we wanted implicit lossy conversions to be errors in our code but there are a number of cases where Qt did this. I believe these have since been fixed though and -Wconversion is now used? Regards, Rob. On 7 May 2014 10:37, Mikołaj Siedlarek <msiedla...@nctz.net> wrote: > On 07 May 2014, at 11:15, Robert Knight <robertkni...@gmail.com> wrote: >>> It is a very good idea to have the Qt files treated as system files. >>> I’ve gone to great lengths to filter out the warnings from Qt in our CMake >>> files >> >> I would caution against that. Could we just fix the warnings in Qt >> headers instead? > > I agree that would be ideal solution if Qt headers could be fixed to the > point they > don’t trigger any warnings with -Weverything flag on. This is obviously not > possible, > as many warnings are just warnings and Qt is complicated enough to use many > non-obvious constructs. > > Therefore Qt have to settle on some level of warnings, probably closer to > -Wall > with some warnings disabled, and user is also forced to settle on the same > level > or lower. I compile my project on -Weverything with some warnings disabled > (bad case of OCD I guess) and that wouldn’t be a satisfying solution for me. > >> I enabled suppression of warnings in Qt headers for a project a while >> back and ended up suppressing >> a real and serious warning that occurred when a generic class in Qt >> was instantiated with a particular >> type in my code. IIRC I was using QSharedPointer<T> with a 'T' which >> was only forward-declared at the point where >> ~QSharedPointer<T> ended up being instantiated. The normal warning got >> suppressed because it occurred in the >> Qt template class header even though the error was actually in >> relation to my code. > > Perhaps user could have a choice whether he prefers Qt headers to be treated > as system headers, but with current CMake’s exported target functionality I > don’t > see a good way to do that. > >> >> Regards, >> Rob. >> >> >> On 7 May 2014 10:09, Mikołaj Siedlarek <msiedla...@nctz.net> wrote: >>> On 07 May 2014, at 10:59, Kurt Pattyn <pattyn.k...@gmail.com> wrote: >>>> On 06 May 2014, at 11:40, Mikołaj Siedlarek <msiedla...@nctz.net> wrote: >>>> >>>>> Hi, >>>>> >>>>> I’m on a quest to enable hack-free all-warnings-enabled building of my >>>>> project using, among others, >>>>> Qt and CMake. This requires that compiler treat Qt headers included in my >>>>> code as “system headers” >>>>> and not warn me about constructs used in them. >>>>> >>>>> I already contributed -iframework (Apple frameworks counterpart to >>>>> -isystem) flag support to CMake >>>>> (https://github.com/Kitware/CMake/pull/100), so with 3.0 version it >>>>> should correctly handle properly >>>>> marked include directories on all systems. >>>>> >>>>> The only problem is current CMake integration in Qt uses >>>>> INTERFACE_INCLUDE_DIRECTORIES >>>>> target property, when to be provide a system include directory it should >>>>> use >>>>> INTERFACE_SYSTEM_INCLUDE_DIRECTORIES. On compilers that do not support >>>>> -isystem flag >>>>> CMake falls back to -I, so compatibility would not be a problem. >>>>> >>>>> The problem is current CMake integration in Qt requires version 2.8.3, but >>>>> INTERFACE_SYSTEM_INCLUDE_DIRECTORIES is only available since 2.8.12. >>>>> Before I propose >>>>> a patch I’d like to consult a maintainer of this system, or at least >>>>> someone more familiar with >>>>> Qt release process, whether it’s best to add some CMake version checks or >>>>> version requirement >>>>> can be bumped with next release. >>>>> >>>>> Please direct me to someone I can discuss this with, or tell me directly >>>>> that my idea is bad. >>>> It is a very good idea to have the Qt files treated as system files. I’ve >>>> gone to great lengths to >>>> filter out the warnings from Qt in our CMake files. It would be nice if >>>> this was included out-of-the-box. >>>> One problem that is not fixed by the system flag, is the auto-generated >>>> files (moc files). >>> >>> I thought about that and I believe it could be fixed in CMake’s AUTOMOC >>> functionality. I’ll look into it. >>> >>>> For those I have submitted a patch that should appear in Qt 5.3.1. >>>> Personally I would not force version 2.8.12 as AFAIK that version is not >>>> available out-of-the-box on Debian >>>> for instance. >>> >>> Yes, it seems stable Debian has just been released with CMake 2.8.9, so >>> it’s gonna be here for a while. >>> A version check then and fallback to INTERFACE_INCLUDE_DIRECTORIES. >>> _______________________________________________ >>> Development mailing list >>> Development@qt-project.org >>> http://lists.qt-project.org/mailman/listinfo/development > _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development