Почему gcc10 не видит флаг -fcoroutines?
Я пытаюсь скомпилить таргет, с подключенным в него заголовком #include <coroutine>. Я подключил в cmake все необходимое.
cmake_minimum_required(VERSION 3.17)
project(cortest1)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "-fcoroutines")
set(CMAKE_CXX_FLAGS "-pthread")
add_executable(cortest1 main.cpp)
Но в ответ на мои попытки gcc10 вывод ошибку
In file included from /home/anton/dev/cortest1/main.cpp:2: /usr/include/c++/10/coroutine:295:2: error: #error "the coroutine header requires -fcoroutines" 295 | #error "the coroutine header requires -fcoroutines"
Как это исправить? Используется g++ версии 10.2.0
Ответы (1 шт):
Давайте подумаем, а что делает команда SET ? она выставляет значение заданной переменной.
а что произойдет, если для одной и той же переменной будет вызвана дважды? где то так
set(CMAKE_CXX_FLAGS "-fcoroutines")
set(CMAKE_CXX_FLAGS "-pthread")
второй вызов перетрет первый и компилятор не узнает о том, что нужны корутины. И будет жаловаться.
Что же делать? Можно поступить по Вашему и просто сделать вот так
set(CMAKE_CXX_FLAGS "-fcoroutines -pthread")
и это будет в данном случае работать. Но давайте сделаем все красиво (тут я полагаю, что cmake старше третьей версии).
У меня получилось так
cmake_minimum_required(VERSION 3.17)
project(cortest1)
set(CMAKE_CXX_STANDARD 20)
# добавим опцию компилятора, позволив, cmake самому разобраться с ней
add_compile_options(-fcoroutines)
add_executable(cortest1 main.cpp)
# а эти три строки включат поддержку pthread подключат ее куда нужно.
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(cortest1 PRIVATE Threads::Threads)