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 的未來版本中移除。