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 &gt;= 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.htmlCMakeToolchain应该可以根据柯南设定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构建方法

VS2019 - 使用 Cmake 项目在 Linux 上进行 Sudo 远程调试

windows vs2019使用cmakefile

cmake 属性 VS_USER_PROPS 静默忽略

VS2019CMake项目的简单使用

zliblibzip libzippp 库编译(windows + cmake + vs2013)