Conan Create执行时遭遇C++标准14与17兼容错误求助
看起来你在尝试用Conan构建Poco静态库时,碰到了C版本不匹配的烦人问题——明明已经在CMakeLists和命令行指定了C17,却还是被提示当前cppstd是14,低于要求的17。我整理了几个可能的解决方向,你可以逐一排查:
检查你的Conan Profile配置
你使用的build_profiles\win_x86_64_msvc_17_193_Releaseprofile文件里,可能已经默认设置了compiler.cppstd=14,这会覆盖你命令行中-s compiler.cppstd=17的参数。打开这个profile文件,找到compiler.cppstd这一行,把它改成17,保存后再重新执行conan create命令。明确指定Poco包的C++标准
有时候依赖包的配置不会自动继承全局的cppstd设置,你可以在conan create命令里单独给Poco指定C++17:conan create . -o xf_iam_client/*:shared=False --build=missing --profile build_profiles\win_x86_64_msvc_17_193_Release -s compiler.cppstd=17 -s poco:compiler.cppstd=17 -v trace清除Conan缓存中的旧Poco包
之前你可能用C++14构建过Poco包,缓存里的旧包会导致冲突。执行以下命令彻底删除缓存中的Poco相关内容:conan remove poco/1.13.3 -f之后再重新运行
conan create,让Conan重新用C++17构建Poco。强化CMakeLists.txt中的C++标准设置
确保你的CMakeLists.txt里不仅设置了CMAKE_CXX_STANDARD=17,还要加上CMAKE_CXX_STANDARD_REQUIRED=ON,强制CMake使用C++17而不是自动降级:set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # 可选,禁用编译器扩展,保持标准兼容性确认MSVC版本与Profile的匹配性
你同时安装了MSVC 2019和2022,要确认你的profile里compiler.version是否正确对应MSVC 2022(2022的版本号通常是17.x)。如果profile指定的是2019的版本(16.x),即使你装了2022,Conan还是会用2019的环境,而2019默认的C++标准是14,这时候就必须明确指定compiler.cppstd=17才能生效。直接向CMake传递C++标准参数
在conan create命令中,通过-dc参数直接给CMake传递C++标准配置,绕过Conan的参数传递可能出现的问题:conan create . -o xf_iam_client/*:shared=False --build=missing --profile build_profiles\win_x86_64_msvc_17_193_Release -s compiler.cppstd=17 -dc CMAKE_CXX_STANDARD=17 -dc CMAKE_CXX_STANDARD_REQUIRED=ON -v trace
你可以先从检查Profile配置和清除缓存这两步开始,这两个是最常见的诱因。如果还是不行,再尝试其他方法。
内容来源于stack exchange

