CLion中CMake配置Qt5报错Qt requires C++11 support求助
问题:MSVC2015编译Qt5.15.2提示需要C++11支持
使用CLion搭配CMake构建Qt项目时,已多次调整C++版本配置(包括将CXX_STANDARD从11改为14),编译引入Qt模块的文件时仍抛出如下错误:
msvc2015_64/include/QtCore/qbasicatomic.h:61:4: error: #error "Qt requires C++11 support" # error "Qt requires C++11 support" ^
原有CMake配置如下:
cmake_minimum_required(VERSION 3.16.3) project(Target123) add_compile_options(-std=c++11) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_PREFIX_PATH "C:/Qt/5.15.2/msvc2015_64/lib/cmake") find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets) add_executable( Target123 main.cpp startscreen.cpp startscreen.h startscreen.ui) set_target_properties(Target123 PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) target_link_libraries (Target123 Qt5::Core Qt5::Gui Qt5::Widgets)
根因
- 配置里的
add_compile_options(-std=c++11)是GCC/Clang专属的编译参数,MSVC编译器完全不识别该参数,会直接忽略,不会触发C++11模式开启。 - MSVC2015默认编译配置没有开启完整C11特性支持,Qt的头文件检测不到对应C版本宏就会抛出该错误。
- 若CLion配置的工具链和Qt版本不匹配(比如选了MinGW、其他版本VS套件),也会触发该检测失败。
- 重复设置全局和target级别的C++标准不会提升配置优先级,反而可能因为CMake缓存残留导致配置不生效。
修复步骤
- 删除无效配置:去掉
add_compile_options(-std=c++11)这行,该配置对MSVC无任何作用。 - 校验CLion工具链:打开设置-构建、执行、部署-工具链,确认当前使用的编译套件为Visual Studio 2015 amd64,和安装的
msvc2015_64版本Qt完全对应,不能混用其他编译器。 - 补充MSVC专属编译参数,在
find_package(Qt5 ...)之前添加如下配置,给MSVC指定正确的C++标准开关:
if(MSVC) # MSVC2015需要显式指定/std参数开启完整C++11/14支持 add_compile_options(/std:c++14) endif()
- 清理CMake缓存:删除项目下的
cmake-build-*构建目录,或者点击CLion CMake面板的「重置缓存并重新加载项目」,确保旧的错误配置被完全清除。 - 重新执行构建即可。
补充说明:不需要重复在全局和target级别设置CXX_STANDARD相关属性,保留全局的set(CMAKE_CXX_STANDARD 11)和set(CMAKE_CXX_STANDARD_REQUIRED ON)两行即可,target下的重复配置可以删掉,不影响最终效果。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

