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 中移除。