【问题标题】:Why does qmake add -O1 and -O2 optimization flags in this case?为什么 qmake 在这种情况下会添加 -O1 和 -O2 优化标志?
【发布时间】:2014-01-24 14:22:06
【问题描述】:

我正在尝试使用 qmake .pro 文件将优化标志传递给 gcc

hello.pro:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

QMAKE_CXXFLAGS += -O3 \

ma​​in.cpp:

#include <iostream>

int main()
{
    std::cout << "Hi!" << std::endl;
    return 0;
}

编译输出:

15:14:34:运行项目 TestGrounds 的步骤...
15:14:34:开始:
"/usr/bin/make" 清理 rm -f main.o
rm -f *~ 核心 *.core
15:14:34:进程“/usr/bin/make”正常退出。
15:14:34:配置不变,跳过 qmake 步骤。
15:14:34:开始:“/usr/bin/make”
g++ -c -pipe -O3 -O2 -Wall -W -fPIE -I/opt/Qt5.2.0/5.2.0/gcc/mkspecs/linux-g++ -I../../项目/测试场地-I。 -o main.o ../../Projects/TestGrounds/main.cpp
g++ -Wl,-O1 -Wl,-rpath,/opt/Qt5.2.0/5.2.0/gcc -o TestGrounds main.o
15:14:35:进程“/usr/bin/make”正常退出。
15:14:35:经过时间:00:01。

但是为什么 -O1-O2 优化标志也通过了呢?

我尝试清理项目并重建它,结果是一样的。

【问题讨论】:

    标签: c++ gcc qmake


    【解决方案1】:

    现在有一个更简单的选项,在项目设置中添加这个:

    CONFIG += optimize_full
    

    或在您的 .pro 中:

    CONFIG(release, debug|release) {
        CONFIG += optimize_full
    }
    

    它会将 -O2 替换为 -O3。 (似乎从 2014 年就开始了)

    【讨论】:

    • 工作正常。这是官方功能吗?它是否记录在某处?
    【解决方案2】:

    试试这个

    QMAKE_CXXFLAGS_RELEASE -= -O1
    QMAKE_CXXFLAGS_RELEASE -= -O2
    QMAKE_CXXFLAGS_RELEASE *= -O3
    

    【讨论】:

    • 为您修复了 *= :-)
    • 谢谢!这删除了最初的 -O2 标志,但第二个标志仍然存在。另外我想知道为什么这些标志首先存在。
    • 错误修复 :-(,因为如果在某个地方应用了 -O3,我们会获得重复。*= - 只有在尚未定义的情况下才会添加到列表中。@rubenvb 请返回我的版本) .
    • @DeadWarlock 我的错。我不知道*=。很抱歉弄得一团糟。
    • 因为 qmake 有自己的默认标志用于构建项目并使用它们生成 make 文件。您可以找到他们应用的地方,自行更改并重建 qmake.exe(和 Qt 库,如果需要))。 -O1 仍然存在,因为它们可能在另一个变量中定义,而不是在 QMAKE_CXXFLAGS_RELEASE
    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2017-12-24
    相关资源
    最近更新 更多