cmake config_error ai_generated true

CMake Error: CUDA_ARCHITECTURES is empty for target "mytarget". This is not allowed when enabling CUDA language.

ID: cmake/cuda-architectures-empty-with-cuda-language

Also available as: JSON · Markdown · 中文
90%Fix Rate
90%Confidence
1Evidence
2023-06-05First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
cmake 3.18 active
cmake 3.22 active
cmake 3.26 active

Root Cause

When project() enables CUDA (e.g., enable_language(CUDA) or project(MyProject LANGUAGES CUDA)), CMake requires setting CUDA_ARCHITECTURES for each target to specify GPU architecture, but it is left empty.

generic

中文

当 project() 启用 CUDA(例如 enable_language(CUDA) 或 project(MyProject LANGUAGES CUDA))时,CMake 要求为每个目标设置 CUDA_ARCHITECTURES 来指定 GPU 架构,但该值为空。

Official Documentation

https://cmake.org/cmake/help/latest/prop_tgt/CUDA_ARCHITECTURES.html

Workarounds

  1. 95% success Set CUDA_ARCHITECTURES on the target: set_property(TARGET mytarget PROPERTY CUDA_ARCHITECTURES "75;80") or set(CMAKE_CUDA_ARCHITECTURES "75;80") globally before add_executable/add_library.
    Set CUDA_ARCHITECTURES on the target: set_property(TARGET mytarget PROPERTY CUDA_ARCHITECTURES "75;80") or set(CMAKE_CUDA_ARCHITECTURES "75;80") globally before add_executable/add_library.
  2. 85% success If you don't care about specific architectures, set it to native: set(CMAKE_CUDA_ARCHITECTURES "native") in CMakeLists.txt.
    If you don't care about specific architectures, set it to native: set(CMAKE_CUDA_ARCHITECTURES "native") in CMakeLists.txt.

中文步骤

  1. 在目标上设置 CUDA_ARCHITECTURES:set_property(TARGET mytarget PROPERTY CUDA_ARCHITECTURES "75;80"),或者在 add_executable/add_library 之前全局设置 set(CMAKE_CUDA_ARCHITECTURES "75;80")。
  2. 如果不在意特定架构,设置为 native:在 CMakeLists.txt 中 set(CMAKE_CUDA_ARCHITECTURES "native")。

Dead Ends

Common approaches that don't work:

  1. Setting CMAKE_CUDA_ARCHITECTURES to empty string hoping CMake picks a default 100% fail

    CMake treats empty string the same as unset, still triggering the error.

  2. Disabling CUDA language completely by removing it from project() 80% fail

    This may break compilation if the project uses CUDA source files (.cu), leading to 'unknown file type' errors.