【问题标题】:How to Program C++11 Using Qt5?如何使用 Qt5 编写 C++11?
【发布时间】:2012-06-19 10:22:35
【问题描述】:

我正准备和我的朋友一起编写一个跨平台项目。我们决定分别使用 Qt 和 gcc 作为我们的 IDE 和工具链。他在 Linux 上工作,我在 Windows 上工作。

但是,Linux 上的 gcc 不一定是 Windows 上的 gcc。更具体地说,Windows 上的 Qt 使用 gcc 4.4 安装 mingw,而我的朋友使用 gcc 4.7。所以我尝试为 windows 获取更新的 gcc 版本。

我当前的 Qt 版本是 5,并使用从该站点下载和安装的 gcc 4.7:http://www.equation.com/servlet/equation.cmd?fa=fortran

我将它安装在 C:\QtSDK\mingw 并简单地覆盖了 Qt 安装中存在的所有文件。我想如果我只是走捷径,我就不必在 Qt 中重新配置任何东西。

但是,即使使用编译器标志:

QMAKE_CXXFLAGS += -std=c++0x (Qt 4.7)

CONFIG   += c++11 (Qt5)

IDE 或工具链无法编译简单的基于范围的 for 循环:

int main(int argc, char *argv[])
{
    int my_array[5] = {1, 2, 3, 4, 5};
    for (auto x : my_array)
        std::cout << x << std::endl;

    return 0;
}

或初始化列表:

int main(int argc, char *argv[])
{
    QVector<int> testsData { 1, 2, 10, 42, 50, 123  };
    QStringList options = { QLatin1String("foo"), QLatin1String("bar")  };

    return 0;
}

但是,看看 gcc 4.7 的实现细节,这两个特性以及更多特性都应该很容易获得。

有没有其他人尝试在 Windows 上使用 gcc 和 Qt?如果是这样,你是如何让它工作的?我想要一个使用 gcc 4.6 或 4.7 的解决方案,但如果根本不可能,我会接受更少的解决方案。

或者,是否有适用于 Linux 和 Windows 的开发环境利用 C++11 功能?如果它能正常工作,我也会满足于 Qt 之外的其他东西......

我使用了来源:

C++0x in Qt (Qt 4.7-4.8)

C++11 in Qt5

【问题讨论】:

  • 注意:在 Qt5 中使用 QMAKE_CXXFLAGS += -std=c++0x 会导致错误“D9002: Ignoring unknown option -std=c++0x”。显然,这个开关在新的 Qt 版本中已经被移除了。
  • 对不起,我只是写下关于按钮所说的内容:Qt Creator 2.5 基于 Qt4.8(32 位)于 2012 年 5 月 9 日(Qt5 发布日)构建。我使用的这些信息中是否有任何错误?
  • 是的:Qt Creator 不是 Qt。 Qt Creator 2.5 不是“Qt5”。 Qt Creator 是一个 IDE,Qt 是一个应用程序框架。
  • 感谢您消除我的误解 :)
  • 不客气。这是一个(也是)常见的误解。它发生了很多,它触发了我不太好的一面:)

标签: c++ qt gcc c++11 cross-platform


【解决方案1】:
QMAKE_CXXFLAGS += -std=c++0x

导致错误,因为您没有使用 MinGW 编译器。 “D9002: Ignoring unknown option -std=c++0x”是来自 MSVC 编译器的错误。

在 QtCreator 中,转到项目选项卡(左侧)并更改您正在使用的工具链。如果它没有自动检测到 MinGW,您将不得不通过单击管理按钮自己添加它。

【讨论】:

  • 嘿!感谢您的回答,但我已经转到工具 -> 选项 -> 构建和运行 -> 未配置的项目来更改工具链。我什至创建了第二个 mingw 位置 C:/QtSDK/ming4.8 并为这个新工具链创建了一个单独的条目。 mingw 工具链都不起作用,并且都给了我同样的警告。我是不是做错了什么?
  • 这是否意味着您已修复它?工具 -> 选项不是每个项目的配置。
  • 是的。我没有意识到 Tools->Options 实际上并没有改变构建配置。那是……哎呀!无论如何,它现在可以工作了,非常感谢:)
  • 只是给未来读者的一个提示:使用 GCC/MinGW >= 4.7 你最好使用标志-std=c++11,从而在connect 中获得更多甜蜜的功能,例如 lambdas。此外,在我看来,在 Qt 5.0.1 中 CONFIG += c++11 不需要在 .pro 文件中(并且不编译)。
【解决方案2】:

更新:

根据此链接:https://wiki.qt.io/How_to_use_C%2B%2B11_in_your_Qt_Projects

现在可以这样做了:

CONFIG += c++11

CONFIG += c++14

此外,即将推出的 Qt 5.7 将默认需要 C++11 编译器,并且将不再支持旧的非 C++11 编译器。

较早的更新:

要启用 C++11 - 需要 GCC 4.7 和更高版本:

qmake 构建系统:

QMAKE_CXXFLAGS += -std=c++11

qbs 构建系统:

cpp.cxxLanguageVersion: "c++11"

要启用 C++14 - 需要 GCC 4.9 和更高版本:

qmake 构建系统:

QMAKE_CXXFLAGS += -std=c++14

qbs 构建系统:

cpp.cxxLanguageVersion: "c++14"

注意:请注意“c++11”、“c++14”等区分大小写。


过时版本:

qbs 构建系统:

cpp.cxxFlags: "-std=c++11"
cpp.cxxFlags: "-std=c++14"

旧版本:

现在建议将 GCC 4.7 用于 Qt5。使用 GCC 4.7,您可以使用 QMAKE_CXXFLAGS += -std=c++11

编辑:在 GCC 4.9 中,现在可以通过传递以下标志来启用 C++14:QMAKE_CXXFLAGS += -std=c+11

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2017-10-27
    • 2013-12-12
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多