Установите CXX-стандарт на c ++ 17 при объединении C ++ и CUDA в CMakeLists - PullRequest
0 голосов
/ 01 мая 2020

Согласно документации CMake, мне просто нужно написать

project(${PROJECT_NAME} LANGUAGES CUDA CXX)

, когда я хотел бы объединить CUDA-файлы и нативные C ++-файлы в одном проекте. Тогда мне больше не нужно звонить cuda_add_executable(), а скорее add_executable, и CMake должен сам все выяснить. Это прекрасно работает, если я не хочу указывать стандарт для C ++ - кода (используя set(CMAKE_CXX_STANDARD 17)). Затем я получаю сообщение об ошибке

Target requires the language dialect "CUDA17" (with compiler extensions), but CMake does not know the compile flags to use to enable it

Есть ли альтернативное решение или мне лучше вернуться к find_package(CUDA) и cuda_add_executable?

1 Ответ

1 голос
/ 01 мая 2020

Основываясь на комментарии @talonmies, я нашел решение этой проблемы, задав переменные явно для каждого языка, то есть CUDA и CXX:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

Теперь чисто C++ -файлы компилируются в соответствии с C ++ 17, а CUDA -файлы компилируются в соответствии с C ++ 14.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...