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)。
我正在尝试在 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)。