Как включить заголовки 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 будет работать, но это не вариант для меня.
2 ответов:
Я нашел два способа подавления предупреждений из заголовков Qt: один-путем установки Qt в путь системы (как предложено в другом ответе), а другой-непосредственно из вашего файла
proс помощью флагов GCC.
При построении вашего собственного 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 список.
Или непосредственно в файле 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 выглядит следующим образом:
Обратите внимание, что пути включения Qt по-прежнему добавляются с помощью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 ...-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