我正在尝试在android上使用asio和协程集成一个boost项目。我在CMakeLists.txt文件上使用set(CMAKE_CXX_FLAGS "-fcoroutines-ts")
(使用c++17)。当我设置这个标志时,ANDROID宏变得未定义。如果我添加-DANDROID,那么协程将被禁用。这两个标志不兼容吗?我可以使用c++协同程序在Android与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)还是只在实现中使用协程(选择PRIVATE)。