Netbeans针对Qt项目的“-O3”优化

5
我正在使用Netbeans 7.0编写Qt/C++代码,希望为我的项目启用-O3编译器开关。在Netbeans中,默认的优化级别是-O2
我通过以下方式添加了-O3
"属性" -> "构建" -> "Qt" -> "专家" -> "自定义定义" -> 添加 QMAKE_CXXFLAGS += -O3 但是,在重新构建项目时,对于每个.cpp文件,我看到如下输出:

g++.exe -c -O3 -O2 -frtti -fexceptions -mthreads -Wall ...... test.cpp

我认为第一个-O3被第二个-O2覆盖了,并且优化级别变成了-O2
我应该如何通过“属性”->“构建”->“...”来配置我的项目以便使用-O3?或者,我如何删除-O2

1
你是正确的。请参阅文档,其中写道:“如果您使用多个 -O 选项,带或不带级别数字,则最后一个选项是有效的。” - Alexandre C.
一些随机的论坛帖子说“项目属性->构建->C++编译器->附加选项”。不知道他们是否正确。 - Mooing Duck
@MooingDuck:不,那种方式适用于“C/C++应用程序”项目,而不是“C/C++ Qt应用程序”。 - masoud
3个回答

3
在“自定义定义”框中添加两个条目:一个是QMAKE_CXXFLAGS -= -O2,另一个是QMAKE_CXXFLAGS += -O3。这将删除-O2标志并添加-O3标志。

3
我假设你只需要在发布版本中使用-O3,对吗?
然后将QMAKE_CXXFLAGS_RELEASE += -O3设置为在我的Debian和MacOS X的命令行构建中将-O3放在-O2之后。
这是有道理的,因为在特定于平台的mkspecs中提供了-O2,所以附加任何内容都应该像这样工作。

假设您正在使用win32-g++规范,那么您的QMAKE_CFLAGS_RELEASE(和QMAKE_CXXFLAGS_RELEASE)等于"-O2"。您可以尝试一下,将QMAKE_CXXFLAGS_RELEASE = -O3(使用=而不是+=)放进去。 - ayoy
出于好奇,为什么您需要对调试构建进行优化?这可能会导致调试问题...我不知道Netbeans是否向Qt mkspecs添加了自己的逻辑,但是如果您不应该在调试构建中获得-O2,那么也许Netbeans将每个构建都视为发布构建。无论如何,简化的命令行看起来像这样:g++ $${QMAKE_CXXFLAGS} $${QMAKE_CXXFLAGS_RELEASE} (...),因此您放入QMAKE_CXXFLAGS中的任何内容都可以被QMAKE_CXXFLAGS_RELEASE覆盖。 - ayoy
那么,没有办法在不覆盖它们的情况下删除默认的 QMAKE_CXXFLAGS 选项吗? - masoud
在您的Qt安装中,查找mkspecs文件夹,并检查win32-g++\qmake.conf文件。默认构建设置在那里提供。对于该mkspecs,QMAKE_CXXFLAGS为空。无论如何,要删除默认标志,您必须使用空字符串覆盖它们,我认为这非常清楚。 - ayoy

0

让Netbeans使用-O3的方法是进入项目属性 > 构建 > C++编译器,然后将开发模式设置为“性能发布”


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