-Weffc++
QtプロジェクトでGCCオプションを使用しています。Qtヘッダーからの警告を抑制するために、を追加し QMAKE_CXXFLAGS += -isystem $(QTDIR)\include
ます。
ただし、これですべての警告が抑制されるわけではありません。ファイルにが含まれているため、 QUuidクラスから
迷惑な警告が表示されます。
追加しようとしまし
た
が、役に立ちませんでした。これを修正する方法はありますか?$(QTDIR)\include\QtCore\quuid.h
..\..\src\corelib\plugin\quuid.h
QMAKE_CXXFLAGS += -isystem $(QTDIR)\src
QMAKE_CXXFLAGS += -isystem $(QTDIR)\src\corelib\plugin
2298 次
2 に答える
10
各ディレクトリを個別に抑制する必要があります。私のプロジェクトの例:
QMAKE_CXXFLAGS += -isystem "$$[QT_INSTALL_HEADERS]/qt5" -isystem "$$[QT_INSTALL_HEADERS]/qt5/QtWidgets" \
-isystem "$$[QT_INSTALL_HEADERS]/QtXml" -isystem "/usr/include/qt5/QtGui" \
-isystem "$$[QT_INSTALL_HEADERS]/QtCore"
または、有効にした正確なQtモジュールに対して上記を自動化するには、次のようにします。
for (inc, QT) {
QMAKE_CXXFLAGS += -isystem \"$$[QT_INSTALL_HEADERS]/Qt$$system("echo $$inc | sed 's/.*/\u&/'")\"
}
# Still need this separately:
QMAKE_CXXFLAGS += -isystem "$$[QT_INSTALL_HEADERS]/qt5"
于 2013-11-28T11:05:08.197 に答える
1
このスレッドは私を大いに助けてくれました。@dismineに感謝しますが、場合によってはうまくいかなかったので、ソリューションを貼り付けています(最初の回答を編集したくない)
コマンドを削除するように拡張したsed
ので、クロスプラットフォームであり、標準のqmakeの置換関数、、、、を$$split()
使用$$join()
し$$upper()
ます$$take_first()
。
moduleList
ローカル変数が必要です。ローカル変数がないと機能しません。
以下の作品Qt >=5.15.2
(もちろん、それより低いバージョンでも動作しますが、私はそれをテストしませんでした):
# Treat Qt's headers as system headers
QMAKE_CXXFLAGS += -isystem $$shell_quote($$[QT_INSTALL_HEADERS])
for(module, QT) {
equals(module, "testlib") {
QMAKE_CXXFLAGS += \
-isystem $$shell_quote($$[QT_INSTALL_HEADERS]/QtTest)
} else {
# Capitalize a first letter, result: -isystem .../include/QtCore
moduleList = $$split(module, )
QMAKE_CXXFLAGS += \
-isystem $$shell_quote($$[QT_INSTALL_HEADERS]/Qt$$upper(\
$$take_first(moduleList))$$join(moduleList, ))
}
}
unset(moduleList)
現在使用されているQtモジュールに基づいて正しいコンパイラフラグを動的に生成するため-isystem
、このコードをさまざまなプロジェクト/サブプロジェクトに含めることができます。
于 2021-09-04T05:45:31.030 に答える