CMP0104¶
在 3.18 版本中新增。
当 CMAKE_CUDA_COMPILER_ID
为 NVIDIA
时,初始化 CMAKE_CUDA_ARCHITECTURES
。如果 CUDA_ARCHITECTURES
为空,则引发错误。
CMake 3.18 中引入的 CMAKE_CUDA_ARCHITECTURES
用于初始化 CUDA_ARCHITECTURES
,它会将正确的代码生成标志传递给 CUDA 编译器。
在此之前,用户必须手动指定代码生成标志。此策略是为了向后兼容手动指定代码生成标志。
此策略的 OLD
行为是在 CMAKE_CUDA_COMPILER_ID
为 NVIDIA
时不初始化 CMAKE_CUDA_ARCHITECTURES
。允许 CUDA_ARCHITECTURES
为空。
此策略的 NEW
行为是在 CMAKE_CUDA_COMPILER_ID
为 NVIDIA
时初始化 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")
为真实和虚拟架构 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 不会向编译器传递任何架构标志。