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() 命令将其显式设置为 OLD 或 NEW。
备注
策略的“旧”行为是 :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 不会将任何架构标志传递给编译器。