6

-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

4

2 に答える 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 に答える