CMP0104

在版本 3.18 中新增。

CMAKE_CUDA_ARCHITECTURESCMAKE_CUDA_COMPILER_IDNVIDIA 時初始化。如果 CUDA_ARCHITECTURES 為空,則引發錯誤。

CMake 3.18 中引入的 CMAKE_CUDA_ARCHITECTURES 用於初始化 CUDA_ARCHITECTURES,它將正確的程式碼產生標誌傳遞給 CUDA 編譯器。

在此之前,使用者必須手動指定程式碼產生標誌。此策略是為了與手動指定程式碼產生標誌向後相容。

此策略的 OLD 行為是在 CMAKE_CUDA_ARCHITECTURESCMAKE_CUDA_COMPILER_IDNVIDIA 時不初始化。允許空的 CUDA_ARCHITECTURES

此策略的 NEW 行為是在 CMAKE_CUDA_ARCHITECTURESCMAKE_CUDA_COMPILER_IDNVIDIA 時初始化,並且如果 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")

為真實和虛擬架構 305072 產生程式碼。

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

為真實架構 70 和虛擬架構 72 產生程式碼。

set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)

CMake 將不會將任何架構標誌傳遞給編譯器。