cmake config_error ai_generated true

CMake Error: CUDA_ARCHITECTURES is empty for target "mytarget".

ID: cmake/missing-cuda-architectures

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

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
3.18 active
3.20 active
3.22 active
3.28 active

Root Cause

CMake 3.18+ requires explicit CUDA architecture specification for targets using CUDA; if not set, it defaults to empty, causing build failure.

generic

中文

CMake 3.18+ 要求为使用 CUDA 的目标显式指定 CUDA 架构;如果未设置,则默认为空,导致构建失败。

Official Documentation

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

Workarounds

  1. 95% success Set a valid CUDA architecture, e.g., `set_target_properties(mytarget PROPERTIES CUDA_ARCHITECTURES "75")` for Turing GPUs.
    Set a valid CUDA architecture, e.g., `set_target_properties(mytarget PROPERTIES CUDA_ARCHITECTURES "75")` for Turing GPUs.
  2. 90% success Set global architecture: `set(CMAKE_CUDA_ARCHITECTURES "75;86")` before defining targets.
    Set global architecture: `set(CMAKE_CUDA_ARCHITECTURES "75;86")` before defining targets.

中文步骤

  1. 设置有效的 CUDA 架构,例如 `set_target_properties(mytarget PROPERTIES CUDA_ARCHITECTURES "75")` 用于 Turing GPU。
  2. 设置全局架构:在定义目标之前 `set(CMAKE_CUDA_ARCHITECTURES "75;86")`。

Dead Ends

Common approaches that don't work:

  1. Set CMAKE_CUDA_ARCHITECTURES to empty string to bypass the check. 90% fail

    CMake policy CMP0104 enforces non-empty architectures; empty string still triggers the error.

  2. Add `set(CMAKE_CUDA_ARCHITECTURES OFF)` to CMakeLists.txt. 80% fail

    OFF is not a valid architecture; CMake interprets it as empty and fails.