CMP0104

在 3.18 版本中新增。

CMAKE_CUDA_COMPILER_IDNVIDIA 时,初始化 CMAKE_CUDA_ARCHITECTURES。如果 CUDA_ARCHITECTURES 为空,则引发错误。

CMake 3.18 中引入的 CMAKE_CUDA_ARCHITECTURES 用于初始化 CUDA_ARCHITECTURES,它将正确的代码生成标志传递给 CUDA 编译器。

在此之前,用户必须手动指定代码生成标志。此策略是为了向后兼容手动指定代码生成标志。

此策略的 OLD 行为是不在 CMAKE_CUDA_COMPILER_IDNVIDIA 时初始化 CMAKE_CUDA_ARCHITECTURES。允许 CUDA_ARCHITECTURES 为空。

此策略的 NEW 行为是在 CMAKE_CUDA_COMPILER_IDNVIDIA 时初始化 CMAKE_CUDA_ARCHITECTURES,并在生成期间 CUDA_ARCHITECTURES 为空时引发错误。

如果 CUDA_ARCHITECTURES 设置为 false 值,则不会将任何架构标志传递给编译器。这旨在支持打包者以及需要完全控制传递标志的罕见情况。

此策略在 CMake 版本 3.18 中引入。它可以通过 cmake_policy()cmake_minimum_required() 来设置。如果未设置,CMake 会发出警告并使用 OLD 行为。

注意

策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。

示例

set_target_properties(tgt PROPERTIES CUDA_ARCHITECTURES "35;50;72")

为真实和虚拟架构 305072 生成代码。

set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)

为真实架构 70 和虚拟架构 72 生成代码。

set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)

CMake 不会向编译器传递任何架构标志。