Windows + VS2019 + CMake + CLion + Conan:如何启用C++20?
Posted
技术标签:
【中文标题】Windows + VS2019 + CMake + CLion + Conan:如何启用C++20?【英文标题】:Windows + VS2019 + CMake + CLion + Conan: How to enable C++20? 【发布时间】:2021-12-27 04:46:46 【问题描述】:我收到此错误:
C:.conan\7c4aa5\1\include\absl/meta/type_traits.h(622): error C2039: 'result_of': is not a member of 'std'
在尝试编译包含Abseil 的项目时。
如果我点击错误的来源,我会看到:
#if __cplusplus >= 201703L
// std::result_of is deprecated (C++17) or removed (C++20)
template<typename> struct result_of;
template<typename F, typename... Args>
struct result_of<F(Args...)> : std::invoke_result<F, Args...> ;
#else
template<typename F> using result_of = std::result_of<F>;
#endif
顶部有一个提示,std::result_of
在 C++20 中已被删除。
在我的CMakeLists.txt
我有
set(CMAKE_CXX_STANDARD 20)
那么为什么__cplusplus >= 201703L
不是真的呢?是什么设置了这个变量?如何告诉编译器我真的想使用 C++20?
我不知道是否需要说服 Visual Studio 16/2019、CMake、CLion 或其他什么。工具链中的东西太多了,但我会添加一些屏幕截图,这样你就可以看到我的设置是什么,希望有人能指出我缺少的东西。
我完整的CMakeLists.txt
是:
cmake_minimum_required(VERSION 3.21)
set(EXE mario4ever)
project($EXE)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include($CMAKE_CURRENT_SOURCE_DIR/conanbuildinfo.cmake)
conan_basic_setup()
add_executable($EXE src/bootstrap.cpp)
target_link_libraries($EXE $CONAN_LIBS)
add_custom_command(
TARGET $EXE POST_BUILD
COMMAND $CMAKE_COMMAND -E copy_directory
$CMAKE_SOURCE_DIR/resources $<TARGET_FILE_DIR:$EXE>/resources
COMMENT "Copying shaders" VERBATIM
)
【问题讨论】:
【参考方案1】:我刚刚得到它来编译。神奇的线是这样的:
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS /std:c++20 /Zc:__cplusplus")
将其添加到CMakeLists.txt
。
【讨论】:
仅供参考,柯南中有一套新的构建系统集成,将实现透明集成,请看:docs.conan.io/en/latest/reference/conanfile/tools/cmake.html。CMakeToolchain
应该可以根据柯南设定compiler.cppstd
自动定义C++标准。
@drodri 实际上我也确实找到并使用了该设置,但无法使其正常工作。将其添加为“个人资料”。
然后,向github.com/conan-io/conan/issues 提交问题可能会很有用(特别是对于新的 CMakeToolchain 集成,因为它是向前发展的一个,cmake
被认为是遗留问题,将在柯南2.0)以上是关于Windows + VS2019 + CMake + CLion + Conan:如何启用C++20?的主要内容,如果未能解决你的问题,请参考以下文章
mysql源码在windows 10上通过vs2019构建方法