Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 编译器

Posted

技术标签:

【中文标题】Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 编译器【英文标题】:Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 compiler 【发布时间】:2012-12-11 13:41:21 【问题描述】:

我正在尝试使用 Qt 在 Windows 上构建 C++ 应用程序。

我的设置是:

    已安装 Vs2008,2010,2012 已安装 Qt 5 RC1

现在,当我#include 并尝试使用 std::unique_ptr 时,它告诉我它没有定义,所以我查看了 VS2010 标头并看到需要定义 _HAS_CPP0X,所以我将它添加到 .pro 作为 DEFINES + = _HAS_CPP0X

这仍然没有效果,所以我 ctrl+单击#include 内存只是为了找到它使用的内存头:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include

其中真的没有任何 std::unique_ptr !

当然应该看:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include ?

我想我会通过完整路径包含内存,但这仍然失败,包含的内存标头本身与 C++11 相关的错误,例如移动和右值引用。

所以我想知道的是:

    Windows 上的 Qt 能否使用 Vs2010 支持的 C++11 功能? 如果是,那怎么办? 如果不是,那么我非常失望,因为在 Linux 上开发跨平台 Qt 5 应用程序意味着它不是跨平台的,因为它不可能为任何其他平台构建它!

编辑:

解决这个问题的方法很明确:下载 Qt5 的源代码并使用 MinGW 构建它,您就可以完成所有设置(包括已接受答案中的 C++11 pro 选项)。

【问题讨论】:

【参考方案1】:

你可以简单地说:

CONFIG += c++11

在您的 .pro 文件中。但强烈建议将您的编译器升级到最新的g++clang

【讨论】:

...请注意,切换编译器也意味着需要重新编译整个 Qt,这需要首先安装脚本语言等一系列先决条件。因此,一种替代方法是现在在 Linux 上进行开发,并在为 VC++ 2010 以外的其他东西预构建 Windows 二进制文件后添加 Windows 支持......我希望它不会太长。 点击几下,您就具备了所有基本的先决条件。认为这是值得的时间投资。 接受这个答案,因为我让它在 Windows 上工作的唯一方法是使用更新的 MinGw/g++【参考方案2】:

我正在运行 QT Creator 2.6.0,因此如果您转到 Tools > Options > Build & Run 然后查找 Compilers,假设选项菜单没有改变em> 选项卡,您应该会看到自动检测到的编译器列表,希望包括 Microsoft Visual C++ Compiler 10.0。如果没有,可以手动添加。

至于 C++11 支持,如果您使用 cmake 并将项目导入 QT Creator,您可以将其添加到您的 cmake 文件中:set(CMAKE_CXX_FLAGS "-std=c++0x")

如果您使用的是 qmake,那么根据 the manual 设置 QMAKE_CXXFLAGS += -std=c++0x

编辑: 也就是说,Visual Studio 2010 (Visual C++ 10.0) 默认开启 c++11 支持,虽然应该注意它只是一个子集,这里有一个相关的question。

【讨论】:

您是对的,选项是相同的,但是选择该编译器会导致构建错误,找不到 cl.exe?并且默认情况下设置编译器的那些 qmake 标志抱怨它不知道 -std=c++0x 的含义(无法识别的选项)。 我相信这会回答您在 cl.exe ***.com/questions/8800361/… 上的问题,并且我已经添加了关于 c++0x 的注释。 我会在明天之前添加到路径中,尽管我确信它已经在路径中,因为从 cmd.exe 运行 cl.exe 有效! -std=c++0xg++ 标志,Visual C++ 2010/12 无法识别。【参考方案3】:

没有

Windows 上的 Qt 可以使用 Vs2010 支持的 C++11 功能吗?

为此,您必须获得 Visual 2012。

如果不是,那么我非常失望,因为在 Linux 上开发跨平台 Qt 5 应用程序意味着它不是跨平台的,因为它不可能为任何其他平台构建它!

在 mac 上,使用 XCode 4 编译器 CLang 2,在任何平台上都可以使用基于 GCC 4.7 的编译器

【讨论】:

即使 VS2010 确实支持许多 C++11 特性,例如 auto/unique_ptr/lambda 等? 嗨 auto 和 nullptr 是的。 unique_ptr,我不这么认为,但请看这里:blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx 太好了,我不知道细节,我知道2010年不支持move语义,for (x:y)不支持,其他的,你可以看看细节在这个网页上。我知道 部分支持,原子不是...等等 那个博客一定是过时的什么的:msdn.microsoft.com/en-us/library/dd293668.aspx“Visual C++ 2010 将移动语义引入标准模板库 (STL)”

以上是关于Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 编译器的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.14和Qt Creator工具简介

带有 Qt 5 和 Qt Creator 的 msvc2013

Qt Creator 2.5.2 中缺少移动 Qt 应用程序

哪个 Qt Creator 与 Qt4 兼容?

qt creator源码全方面分析(4-5)

qt creator源码全方面分析(4-5)