从Qt 5.6切换到Qt 5.7 - "没有会员' make_unique'在命名空间std"

时间:2016-07-18 18:30:43

标签: 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,但在测试构建过程中出现了多次错误

  

没有会员' make_unique'在命名空间std中

我已经验证了所有适当的标头和编译选项,并排除了任何环境问题。使用Qt 5.7肯定是一个问题。有没有解决方法?

1 个答案:

答案 0 :(得分:9)

事实证明这是一个known problem with CMake/Qt 5.7。显然,从CMake 3.1开始,定义在CMake中使用哪种C ++标准的正确方法是

SET(CMAKE_CXX_STANDARD 14)

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

有趣的是,错误报告非常有趣,因为最初这个问题被认为是一个释放阻止因素,然后降级为已知问题,最终(似乎)甚至从known issue list中清除。