Как включить заголовки Qt с -isystem (системные заголовки) с qmake и qt5?



Я компилирую свой проект на основе Qt5 с включенными предупреждениями на g++:



# project.pro file
QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++


При компиляции Qt выдает множество предупреждений (1000+ с одним простым виджетом), скрывая предупреждения из моего кода.



Как сказать qmake, чтобы он использовал переключатель -isystem при указании заголовков Qt, а не -I для подавления предупреждений? Я не хочу отключать предупреждения, я хочу сохранить их для своего кода.



Примечание: Я проверил этот так Вопрос , но это не работает в моем случае, это может быть будьте только для Qt4, я использую Qt5.



примечание 2: это признанная ошибка , я ищу обходной путь. я использую последнюю версию qmake, скомпилированную из исходных текстов 5.4.1, эта версия передает системные заголовки из /include и /usr/include как системные заголовки, но не заголовки Qt.



Примечание 3: я знаю, что CMake будет работать, но это не вариант для меня.
719   2  

2 ответов:

Я нашел два способа подавления предупреждений из заголовков Qt: один-путем установки Qt в путь системы (как предложено в другом ответе), а другой-непосредственно из вашего файла pro с помощью флагов GCC.

  1. При построении вашего собственного Qt, настройте путь установки заголовка на один из ваших системных путей:

    $ ./configure -headerdir /usr/local/include
    

    Системные пути /usr/include или /usr/local/include или один из остальных, перечисленных в:

    $ grep DEFAULT_INCDIRS mkspecs/qconfig.pri
    QMAKE_DEFAULT_INCDIRS = /usr/include/c++/4.8 /usr/include/x86_64-linux-gnu/c++/4.8 /usr/include/c++/4.8/backward /usr/lib/gcc/x86_64-linux-gnu/4.8/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed /usr/include/x86_64-linux-gnu /usr/include
    

    Источник: этот поток в разработке Qt список.

  2. Или непосредственно в файле Qt pro Просто добавьте флаг -isystem в QMAKE_CXXFLAGS:

    # the line below suppresses warnings generated by Qt's header files: we tell
    # GCC to treat Qt's headers as "system headers" with the -isystem flag
    QMAKE_CXXFLAGS += -isystem $$[QT_INSTALL_HEADERS]
    

    Результирующая командная строка GCC выглядит следующим образом:

    g++ -c -pipe -isystem /usr/local/Qt-5.4.1/include -Wall ...
        -I/usr/local/Qt-5.4.1/include
        -I/usr/local/Qt-5.4.1/include/QtWidgets
        ...
    
    Обратите внимание, что пути включения Qt по-прежнему добавляются с помощью -I, позволяя Qt Creator "видеть" все заголовки Qt, но GCC видит флаг -isystem и подавляет предупреждения для всех вложенных папок.

Вы установили Qt всистемном пути? Иначе qmake не пройдет -isystem.

Вы можете проверить, какие пути являются системными путями в соответствии с qmake, прочитав ваш mkspec/qconfig.pri (после запуска configure), Системные пути устанавливаются в переменную QMAKE_DEFAULT_INCDIRS. Здесь:

QMAKE_DEFAULT_INCDIRS = /usr/include/c++/4.8 /usr/include/x86_64-linux-gnu/c++/4.8 /usr/include/c++/4.8/backward /usr/lib/gcc/x86_64-linux-gnu/4.8/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed /usr/include/x86_64-linux-gnu /usr/include

Comments

    Ничего не найдено.