在 CMakeLists 中组合 C++ 和 CUDA 时将 CXX 标准设置为 c++17

arc*_*pus 0 c++ cuda cmake

根据CMake的文档,我只需要写

project(${PROJECT_NAME} LANGUAGES CUDA CXX)
Run Code Online (Sandbox Code Playgroud)

当我想在一个项目中结合 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
Run Code Online (Sandbox Code Playgroud)

是否有替代解决方案,或者我应该回到find_package(CUDA)cuda_add_executable

arc*_*pus 6

根据@talonmies 的评论,我通过为每种语言显式设置变量找到了解决该问题的方法,即CUDACXX

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
Run Code Online (Sandbox Code Playgroud)

现在纯C++-files是按照C++17CUDA编译的,-files是按照C++14编译的。