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 设置为假值,不会将任何体系结构标志传递给编译器。这是为了支持打包程序以及需要完全控制已传递标志的罕见情况而设计的。

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