如何使用 .pro 文件为 QT qmake + g++ 构建添加 c++ 构建标志?

How to add c++ build flag using .pro file for QT qmake + g++ build?

例如,我想添加 -Wignored-qualifiers 标志:添加到我项目的 .pro 文件的以下行:

QMAKE_CXXFLAGS += -Wignored-qualifiers

但是在构建项目时,在qmake工具提供的g++调用中,这个标志是不存在的,而且这个标志将被禁用的编译器警告也存在。我做错了什么?

我提供完整的输出:

18:38:12: Running steps for project untitled...
18:38:12: Configuration unchanged, skipping qmake step.
18:38:12: Starting: "C:\Qt\Tools\mingw810_32\bin\mingw32-make.exe" -j4
C:/Qt/Tools/mingw810_32/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory 'C:/qt_projects/build-untitled-Static-Release'
g++ -c -fno-keep-inline-dllexport -Wignored-qualifiers -O2 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DQT_STATIC_BUILD -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\untitled -I. -I..\..\Qt\Static599.9.9_Static\include -I..\..\Qt\Static599.9.9_Static\include\QtWidgets -I..\..\Qt\Static599.9.9_Static\include\QtGui -I..\..\Qt\Static599.9.9_Static\include\QtNetwork -I..\..\Qt\Static599.9.9_Static\include\QtCore -Irelease -I. -I..\..\Qt\Static599.9.9_Static\mkspecs\win32-g++  -o release\battlefield.o ..\untitled\battlefield.cpp
g++ -c -fno-keep-inline-dllexport -Wignored-qualifiers -O2 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DQT_STATIC_BUILD -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\untitled -I. -I..\..\Qt\Static599.9.9_Static\include -I..\..\Qt\Static599.9.9_Static\include\QtWidgets -I..\..\Qt\Static599.9.9_Static\include\QtGui -I..\..\Qt\Static599.9.9_Static\include\QtNetwork -I..\..\Qt\Static599.9.9_Static\include\QtCore -Irelease -I. -I..\..\Qt\Static599.9.9_Static\mkspecs\win32-g++  -o release\image.o ..\untitled\image.cpp
g++ -c -fno-keep-inline-dllexport -Wignored-qualifiers -O2 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DQT_STATIC_BUILD -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\untitled -I. -I..\..\Qt\Static599.9.9_Static\include -I..\..\Qt\Static599.9.9_Static\include\QtWidgets -I..\..\Qt\Static599.9.9_Static\include\QtGui -I..\..\Qt\Static599.9.9_Static\include\QtNetwork -I..\..\Qt\Static599.9.9_Static\include\QtCore -Irelease -I. -I..\..\Qt\Static599.9.9_Static\mkspecs\win32-g++  -o release\player.o ..\untitled\player.cpp
g++ -c -fno-keep-inline-dllexport -Wignored-qualifiers -O2 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DQT_STATIC_BUILD -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\untitled -I. -I..\..\Qt\Static599.9.9_Static\include -I..\..\Qt\Static599.9.9_Static\include\QtWidgets -I..\..\Qt\Static599.9.9_Static\include\QtGui -I..\..\Qt\Static599.9.9_Static\include\QtNetwork -I..\..\Qt\Static599.9.9_Static\include\QtCore -Irelease -I. -I..\..\Qt\Static599.9.9_Static\mkspecs\win32-g++  -o release\window.o ..\untitled\window.cpp
In file included from ..\untitled\player.cpp:1:
..\untitled\player.h:91:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast16_t shipNum( const uint_fast16_t size ) const;
     ^~~~~
..\untitled\player.h:97:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t isShip( const uint_fast16_t size, const uint_fast16_t x, const uint_fast16_t y ) const;
     ^~~~~
..\untitled\player.h:134:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const int_fast8_t IsWin();
     ^~~~~
..\untitled\player.h:161:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t checkMyField() const;
     ^~~~~
..\untitled\player.cpp:106:1: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
 const uint_fast8_t Player::checkMyField() const
 ^~~~~
..\untitled\player.cpp:121:1: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
 const uint_fast16_t Player::shipNum
 ^~~~~
..\untitled\player.cpp:147:1: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
 const uint_fast8_t Player::isShip( const uint_fast16_t size, const uint_fast16_t x, const uint_fast16_t y ) const{
 ^~~~~
In file included from ..\untitled\battlefield.cpp:2:
..\untitled\player.h:91:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast16_t shipNum( const uint_fast16_t size ) const;
     ^~~~~
..\untitled\player.h:97:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t isShip( const uint_fast16_t size, const uint_fast16_t x, const uint_fast16_t y ) const;
     ^~~~~
..\untitled\player.h:134:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const int_fast8_t IsWin();
     ^~~~~
..\untitled\player.h:161:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t checkMyField() const;
     ^~~~~
In file included from ..\untitled\image.cpp:2:
..\untitled\player.h:91:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast16_t shipNum( const uint_fast16_t size ) const;
     ^~~~~
..\untitled\player.h:97:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t isShip( const uint_fast16_t size, const uint_fast16_t x, const uint_fast16_t y ) const;
     ^~~~~
..\untitled\player.h:134:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const int_fast8_t IsWin();
     ^~~~~
..\untitled\player.h:161:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t checkMyField() const;
     ^~~~~
..\untitled\player.cpp: In member function 'void Player::ProcessClick(const uint_fast16_t&, const uint_fast16_t&)':
..\untitled\player.cpp:229:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
     if(
     ^~
..\untitled\player.cpp:240:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
         if (
         ^~
..\untitled\player.cpp: At global scope:
..\untitled\player.cpp:346:1: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
 const int_fast8_t Player::IsWin(){
 ^~~~~
In file included from ..\untitled\window.cpp:4:
..\untitled\player.h:91:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast16_t shipNum( const uint_fast16_t size ) const;
     ^~~~~
..\untitled\player.h:97:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t isShip( const uint_fast16_t size, const uint_fast16_t x, const uint_fast16_t y ) const;
     ^~~~~
..\untitled\player.h:134:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const int_fast8_t IsWin();
     ^~~~~
..\untitled\player.h:161:5: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
     const uint_fast8_t checkMyField() const;
     ^~~~~
..\untitled\window.cpp: In member function 'void Window::on_pushButton_5_clicked()':
..\untitled\window.cpp:81:32: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
     else  /*to do message box*/;
                                ^
g++ -static -static-libgcc -Wl,-s -Wl,-subsystem,windows -mthreads -o release\untitled.exe release/battlefield.o release/image.o release/main.o release/player.o release/server.o release/window.o release/untitled_plugin_import.o release/moc_server.o release/moc_window.o  -lmingw32 -LC:\Qt\Static599.9.9_Static\lib C:\Qt\Static599.9.9_Static\lib\libqtmain.a -LC:\Qt\Static599.9.9_Static\plugins\platforms C:\Qt\Static599.9.9_Static\plugins\platforms\libqwindows.a -lwinspool -lshlwapi C:\Qt\Static599.9.9_Static\lib\libQt5EventDispatcherSupport.a C:\Qt\Static599.9.9_Static\lib\libQt5FontDatabaseSupport.a C:\Qt\Static599.9.9_Static\lib\libqtfreetype.a C:\Qt\Static599.9.9_Static\lib\libQt5ThemeSupport.a C:\Qt\Static599.9.9_Static\lib\libQt5AccessibilitySupport.a -LC:\Qt\Static599.9.9_Static\plugins\imageformats C:\Qt\Static599.9.9_Static\plugins\imageformats\libqgif.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqicns.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqico.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqjpeg.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqtga.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqtiff.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqwbmp.a C:\Qt\Static599.9.9_Static\plugins\imageformats\libqwebp.a -LC:\Qt\Static599.9.9_Static\plugins\bearer C:\Qt\Static599.9.9_Static\plugins\bearer\libqgenericbearer.a C:\Qt\Static599.9.9_Static\lib\libQt5Widgets.a -luxtheme -ldwmapi C:\Qt\Static599.9.9_Static\lib\libQt5Gui.a -lcomdlg32 -loleaut32 -limm32 -lglu32 -lopengl32 -lgdi32 C:\Qt\Static599.9.9_Static\lib\libqtlibpng.a C:\Qt\Static599.9.9_Static\lib\libqtharfbuzz.a C:\Qt\Static599.9.9_Static\lib\libQt5Network.a -ldnsapi -liphlpapi C:\Qt\Static599.9.9_Static\lib\libQt5Core.a -lmpr -lversion -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lwinmm C:\Qt\Static599.9.9_Static\lib\libqtpcre2.a 
mingw32-make[1]: Leaving directory 'C:/qt_projects/build-untitled-Static-Release'
18:38:22: The process "C:\Qt\Tools\mingw810_32\bin\mingw32-make.exe" exited normally.
18:38:22: Elapsed time: 00:10.

您的标志已成功添加在 g++ 命令中查找 -Wignored-qualifiers

g++ -c -fno-keep-inline-dllexport -Wignored-qualifiers -O2 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DQT_STATIC_BUILD -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\untitled -I. -I..\..\Qt\Static599.9.9_Static\include -I..\..\Qt\Static599.9.9_Static\include\QtWidgets -I..\..\Qt\Static599.9.9_Static\include\QtGui -I..\..\Qt\Static599.9.9_Static\include\QtNetwork -I..\..\Qt\Static599.9.9_Static\include\QtCore -Irelease -I. -I..\..\Qt\Static599.9.9_Static\mkspecs\win32-g++  -o release\battlefield.o ..\untitled\battlefield.cpp

但是你应该详细阅读 gcc 编译器的 warning-options 是做什么的。

你试图通过将 -Wignored-qualifiers 添加到 QMAKE_CXXFLAGS 来做的事情实际上是告诉编译器启用警告而不是禁用它。 您还可以通过添加 -Wextra 标志来添加此警告。

如果你想抑制这个警告你应该添加-Wno-ignored-qualifiers