C++ 协程和 ANDROID 标志

C++ coroutines and ANDROID flag

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

通过设置 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 headers 中使用协同程序该目标的(选择 PUBLIC)或仅在实现中(选择 PRIVATE)。