CMP0125

在版本 3.21 中新增。

find_file()find_path()find_library()find_program() 命令會將結果快取在其第一個引數指定的變數中。在 CMake 3.21 之前的版本中,如果在呼叫之前已存在具有該名稱的快取變數,但快取變數沒有類型,則會捨棄任何同名的非快取變數,並且始終使用快取變數(另請參閱 CMP0126,了解不同但相似的行為)。這與非快取變數應優先於同名快取變數的慣例相矛盾。如果使用者在命令列上設定了沒有類型的快取變數,例如 cmake -DMYVAR=blah ... 而不是 cmake -DMYVAR:FILEPATH=blah,則可能會發生這種情況。

與上述相關,如果具有指定名稱的快取變數已存在且確實具有類型,則各種 find_...() 命令將傳回該值而不變更。特別是,如果它包含相對路徑,則在這種情況下它不會轉換為絕對路徑。

當策略 CMP0125 設定為 OLD 或未設定時,行為如上所述。當它設定為 NEW 時,行為如下:

  • 如果在呼叫 find_...() 命令時存在指定名稱的非快取變數,則將使用其值,無論是否已存在同名的快取變數。在這種情況下,如果之前不存在此類快取變數,則不會建立快取變數。如果指定名稱的快取變數已存在,則快取將更新為與非快取變數相符。

  • 各種 find...() 命令將始終在結果變數中提供絕對路徑,除非快取或非快取變數提供的相對路徑無法解析為現有路徑。

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

注意

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