CMP0174

在版本 3.31 中新增。

cmake_parse_arguments(PARSE_ARGV) 在單值關鍵字後定義一個空字串的變數。

使用 PARSE_ARGV 形式的 cmake_parse_arguments() 命令的主要原因之一是更穩健地處理與空值相關的邊緣情況。非 PARSE_ARGV 形式不會保留空參數,但 PARSE_ARGV 形式會。對於給定的每個單值關鍵字,即使關鍵字後跟著一個空字串,也應該定義一個變數。

在 CMake 3.31 之前的版本中,如果單值關鍵字後給定的值是空字串,則不會定義任何變數。這意味著程式碼無法偵測到關鍵字未給出,以及關鍵字已給出但值為空字串之間的差異,除非迭代所有參數並檢查關鍵字是否存在。

對於此策略的 OLD 行為,cmake_parse_arguments(PARSE_ARGV) 不會為後跟空字串或根本沒有值的單值關鍵字定義變數。

對於 NEW 行為,cmake_parse_arguments(PARSE_ARGV) 始終為參數中給出的每個關鍵字定義一個變數,即使是值為空字串或根本沒有值的單值關鍵字。使用 NEW 行為,程式碼可以僅使用 if(DEFINED <prefix>_<keyword>) 穩健地檢查是否給定了單值關鍵字。

此策略在 CMake 版本 3.31 中引入。可以透過 cmake_policy()cmake_minimum_required() 設置。如果未設置,CMake 會發出警告,並使用 OLD 行為。

注意

策略的 OLD 行為依定義已棄用,並可能在 CMake 的未來版本中移除。