Qmake:如何在不更改Qmake .conf的情况下删除某个项目的编译器标志

Qmake: how to remove compiler flag for a certain project, without changing qmake.conf?

本文关键字:Qmake 删除 情况下 标志 编译器 项目 conf      更新时间:2023-10-16

我使用的是qmake和Visual Studio。在发布构建qmake添加/GL和/O2标志到所有项目,我需要在我的整个Qt项目中删除某些库的这两个标志。有办法吗?

我有一个类似的问题,我通过在.pro文件中添加以下指令来解决它:

QMAKE_CXXFLAGS_RELEASE -= -g

注意_RELEASE后缀,否则不起作用

我用这个编辑了我的.pro文件,它工作了!

QMAKE_CXXFLAGS_RELEASE  -= -Zc:strictStrings
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -Zc:strictStrings

它不工作:

QMAKE_CFLAGS_RELEASE -= -Zc:strictStrings
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO -= -Zc:strictStrings

你可以试试:

QMAKE_CXXFLAGS_RELEASE  -= -GL -O2
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -GL -O2

看看:

your Qt dircompilermkspecswin32-msvc2013qmake.conf

唯一可行的方法是

QMAKE_CFLAGS -= /GL /O2

但我怀疑这是否适用于QMAKE_CFLAGS

或者,您可以重新定义QMAKE_CFLAGS,忘记其先前的值:

QMAKE_CFLAGS = $$CFLAGS_WITHOUT_GL_O2

您可以编辑配置中使用的qmakespec。

最简单的方法是打开

%QTDIR%mkspecs%QMAKESPEC%

假设环境变量已设置(它们应该设置)

以防它不工作,它将是C:Qt4.x.xmkspecswin32-msvc2010

在qmake.conf文件中,您可以调整以下两行(它们在文件中的不同位置)

QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_LTCG       = -GL

QMAKE_CFLAGS_RELEASE    = -MT
QMAKE_CFLAGS_LTCG       =

但是请注意,您将不得不为您正在使用的每个Qt版本(以及您将做的每个未来更新)这样做。

[编辑]
如果您想在某些项目中使用-O2 -GL选项,则必须添加

QMAKE_CFLAGS_RELEASE    += -O2
QMAKE_CFLAGS_LTCG       += -GL

到需要这些选项的项目的.pro文件。

根据使用和不使用它的项目的数量,这种方法或重新定义QMAKE_CFLAGS将更方便。

如果-=不工作

try in your .pro文件

QMAKE_CFLAGS = $$replace(QMAKE_CFLAGS, "-GL ", "")
QMAKE_CFLAGS = $$replace(QMAKE_CFLAGS, "-O2 ", "")

对于MacOSX (Xcode 13)上的Qt 5.15.2,在QtCreator项目中没有其他答案适合我。

CONFIG += warn_on默认设置为-Wall -Wextra

我想添加的是:

QMAKE_CXXFLAGS += -Wno-unused -Wno-unused-parameter

但是添加这个会导致额外的编译器标志被添加到-Wall -Wextra之前的编译命令中,并且它不起作用。

这些标志是由QMAKE_CXXFLAGS_WARN_ON变量添加的/path/to/Qt/5.15.2/clang_64/mkspecs/common/gcc-base.conf .

所以暂时将它们添加到-Wall -Wextra标志之后,我这样做:

QMAKE_CXXFLAGS_WARN_ON += -Wno-unused -Wno-unused-parameter

现在我有了所有其他的警告,但没有unused-*的警告

最近我遇到了同样的问题。我不得不删除Zc:strictStrings编译器标志。我立刻意识到,仅仅移除是行不通的。因此,解决方案是通过将此字符串包含到.pro文件

中来覆盖该标志。

QMAKE_CXXFLAGS+=-Zc:strictStrings-

像这样,编译器打印一个警告:cl:命令行警告D9025:用'/Zc:strictStrings-'覆盖'/Zc:strictStrings',但它仍然工作。

我在。pro文件中添加了以下内容:

QMAKE_CXXFLAGS -= -Zc:strictStrings