CMP0104

在 3.18 版本加入.

当 CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID> 是 NVIDIA 时初始化 CMAKE_CUDA_ARCHITECTURES。如果 CUDA_ARCHITECTURES 为空,则引发错误。

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

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

当 CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID> 为 NVIDIA 时,此策略的“旧”行为是不初始化 CMAKE_CUDA_ARCHITECTURES。空的 CUDA_ARCHITECTURES 是允许的。

此策略的“新”行为是在 CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID> 为“NVIDIA”时初始化 CMAKE_CUDA_ARCHITECTURES,如果 CUDA_ARCHITECTURES 则引发错误在生成期间为空。

如果 CUDA_ARCHITECTURES 设置为 false 值,则不会将架构标志传递给编译器。这是为了支持打包程序和需要完全控制传递的标志的罕见情况。

此策略是在 CMake 版本 3.18 中引入的。 CMake 版本 |发布|当未设置策略并使用“旧”行为时发出警告。使用 cmake_policy() 命令将其显式设置为 OLDNEW

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。

例子

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

为真实和虚拟架构“30”、“50”和“72”生成代码。

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

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

set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)

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