c++ - 从 Qt 5.6 切换到 Qt 5.7 - 命名空间 std 中的 "no member ' make_unique'

标签 c++ qt cmake c++14

我有一个 CMake Qt 项目,它使用了多个 c++14 功能,包括 std::make_unique。通常这将通过以下方式处理:

LIST(APPEND CMAKE_CXX_FLAGS -std=c++14)

ADD_COMPILE_OPTIONS(-std=c++14)

我想将项目从 5.6 版升级到 5.7 版,但在测试构建期间出现多次失败并出现错误

no member 'make_unique' in namespace std

我已验证所有适当的 header 和编译选项都已到位,并排除了任何环境问题。使用 Qt 5.7 绝对是个问题。有什么解决方法吗?

最佳答案

原来这是一个known problem with CMake/Qt 5.7 .显然,从 CMake 3.1 开始,定义在 CMake 中使用哪个 C++ 标准的正确方法是使用

SET(CMAKE_CXX_STANDARD 14)

从 Qt 5.7 开始,对 CMAKE_CXX_STANDARD 使用任何方法 except 将导致 c++14 错误,如问题中提到的错误。使用此方法清除了我构建的所有错误。

有趣的是,这个错误报告读起来很有趣,因为最初这个问题被认为是一个发布障碍,然后降级为一个已知问题,最终(似乎)甚至从 known issue list 中清除了.

关于c++ - 从 Qt 5.6 切换到 Qt 5.7 - 命名空间 std 中的 "no member ' make_unique',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38443695/

相关文章:

c++ - 包含<sstream>时是否自动包含<string>

c++ - 保持 shared_ptr use_count() 为 1

qt - 在 QT 中将配置设置保存到 XML 文件?

c++ - 如何在任何形状的 Qgraphicsvideoitem 中屏蔽视频

visual-studio - CMake:如何指定要使用的 Visual C++ 版本?

cmake - 如何在 cmake 包注册表中注册安装目录

android - 使用 Android Studio 2.2 和 CMake 在 Android 中编译和使用依赖于 ABI 的可执行二进制文件

c++ - 如何在 C 的头文件中正确编写 extern 数组的声明?

c++ - 以不同方式编码类似功能的更好或优势

qt - 如何调整嵌入在 QWidget 中的 QML 小部件的大小?