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

9

我正在使用 qmake 和 Visual Studio。在发布版本中,qmake会为所有项目添加 /GL 和 /O2 标志,而我需要在整个Qt项目中针对某些库删除这两个标志。有什么方法吗?

8个回答

10

我曾经遇到过类似的问题,通过在 .pro 文件中添加以下指令解决了问题:

QMAKE_CXXFLAGS_RELEASE -= -g

注意 _RELEASE 后缀,否则无法生效。


5
我使用这个方法编辑了我的.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

请查看以下目录:

你的Qt目录\compiler\mkspecs\win32-msvc2013\qmake.conf


我相信检查.conf文件的重要性不可低估。 - Siav Josep

2
唯一可行的方式是:
QMAKE_CFLAGS -= /GL /O2

但我怀疑这对于QMAKE_CFLAGS无效。

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

QMAKE_CFLAGS = $$CFLAGS_WITHOUT_GL_O2

3
尝试了-=但没有成功。第二个解决方案非常明显,我甚至都没想到 :) - Violet Giraffe

1

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

最简单的方法是打开

%QTDIR%\mkspecs\%QMAKESPEC%

假设环境变量已设置(它们应该已设置)
以防万一它不起作用,它将是类似于 C:\Qt\4.x.x\mkspecs\win32-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 将更加方便。


1

在MacOSX上使用Qt 5.15.2(Xcode 13),在QtCreator项目中,其他答案都对我无效。

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

我想添加的是:

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

但是添加这个会导致编译命令中额外的编译器标志在-Wall -Wextra之前被添加,并且它不起作用。
原来这些标志是由/path/to/Qt/5.15.2/clang_64/mkspecs/common/gcc-base.conf中的QMAKE_CXXFLAGS_WARN_ON变量添加的。
因此,为了在-Wall -Wextra标志之后暂时添加它们,我这样做:
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused -Wno-unused-parameter 现在我有了所有其他警告,但没有unused-*

1
如果-=无效,请在您的.pro文件中尝试。
QMAKE_CFLAGS = $$replace(QMAKE_CFLAGS, "-GL ", "")
QMAKE_CFLAGS = $$replace(QMAKE_CFLAGS, "-O2 ", "")

0

最近我遇到了同样的问题。我必须删除Zc:strictStrings编译器标志。我立即学到,仅仅删除是不起作用的。因此,解决方案是通过将此字符串包含在.pro文件中来覆盖标志

QMAKE_CXXFLAGS+=-Zc:strictStrings-

这样编译器会打印一个警告:cl : Command line warning D9025 : overriding '/Zc:strictStrings' with '/Zc:strictStrings-' 但它仍然可以完成工作。


-1
我的解决方法是在 .pro 文件中添加以下内容:
QMAKE_CXXFLAGS -= -Zc:strictStrings

请添加详细说明代码行的作用。我建议提供有关此行在哪里使用(在配置文件中还是从命令行中),以及解释此行如何从整个项目中删除标志。这将帮助其他人学习并评估所提供的答案是否适用于他们。 - Arbiter of buffoonery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接