【问题标题】:C++ coroutines and ANDROID flagC++ 协程和 ANDROID 标志
【发布时间】:2021-03-01 17:37:47
【问题描述】:

我正在尝试在 android 上使用 asio 和协程集成一个 boost 项目。我在 CMakeLists.txt 文件上使用了set(CMAKE_CXX_FLAGS "-fcoroutines-ts")(使用了 c++17)。当我设置此标志时,ANDROID 宏变得未定义。如果我添加 -DANDROID,那么协程将被禁用。这两个标志不兼容吗?我可以在带有 NDK 的 Android 上使用 c++ 协程吗?

【问题讨论】:

  • set 命令用新值覆盖旧值。设置了附加新标志的正确用法(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" "-fcoroutines-ts")。顺便说一句,android ndk ver 23.1 不完全支持 c++20,你还不能使用 c++ 协程。

标签: android cmake android-ndk c++-coroutine


【解决方案1】:

通过设置CMAKE_CXX_FLAGS,您将覆盖原始值,该值可能由您正在使用的工具链文件或直接通过CMake 设置为包含-DANDROID。这里有两种可能:

  • 您可以改用add_compile_options("-fcoroutines-ts"),这会将标志添加到之后定义的所有目标
  • 如果只有一个目标使用协​​程,您也可以通过 target_compile_options(<target> PUBLIC "-fcoroutines-ts")target_compile_options(<target> PRIVATE "-fcoroutines-ts") 设置它,具体取决于您是在该目标的公共标头中使用协程(选择 PUBLIC)还是仅在实现中使用协程(选择私人)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多