CMP0104

在 3.18 版本中添加。

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

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

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

此策略的 OLD 行为是在 CMAKE_CUDA_ARCHITECTURESCMAKE_CUDA_COMPILER_ID 时,不初始化 NVIDIA。允许空的 CUDA_ARCHITECTURES

此策略的 NEW 行为是在 CMAKE_CUDA_ARCHITECTURESCMAKE_CUDA_COMPILER_ID 时,初始化 NVIDIA,并且如果在生成期间 CUDA_ARCHITECTURES 为空,则引发错误。

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

此策略在 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 将不会向编译器传递任何架构标志。