16

我正准备和我的朋友一起编写一个跨平台项目。我们决定分别使用 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 的解决方案,但如果根本不可能,我会接受更少。

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

我使用了以下来源:

Qt 中的 C++0x (Qt 4.7-4.8)

Qt5 中的 C++11

4

2 回答 2

13
QMAKE_CXXFLAGS += -std=c++0x

导致错误,因为您没有使用 MinGW 编译器。“D9002:忽略未知选项-std=c++0x”是来自 MSVC 编译器的错误。

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

于 2012-06-16T18:52:12.587 回答
10

更新:

根据此链接: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"

旧版本:

Qt5 现在推荐使用 GCC 4.7。使用 GCC 4.7,您可以使用 QMAKE_CXXFLAGS += -std=c++11

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

于 2012-12-09T09:43:56.237 回答