CMP0177

在 3.31 版本新增。

install() DESTINATION 路徑已標準化。

install() 命令有多種不同的形式,它們大多數都有一個 DESTINATION 關鍵字,有些有多個位置。CMake 3.30 及更早版本使用 DESTINATION 關鍵字後的值,且不做任何轉換。 install(EXPORT) 形式假設該路徑在計算相對於 DESTINATION 的路徑時,不包含 ... 路徑組成部分,如果專案提供的路徑違反了該假設,則計算出的路徑將不正確。

CMake 3.31 會標準化所有 install() 命令中任何形式給定的 DESTINATION 值,除了 install(TARGETS) 形式的 INCLUDES DESTINATION 之外。執行的標準化與 cmake_path() 命令的標準化相同 (請參閱 標準化)。

此政策的 OLD 行為不會對任何 install() 命令的 DESTINATION 值執行任何轉換。它們會完全按照提供的樣子使用。如果目標路徑包含 ... 路徑組成部分,則 install(EXPORT) 將使用與 CMake 3.30 及更早版本相同的錯誤路徑。

NEW 行為將標準化所有 DESTINATION 值,除了 INCLUDES DESTINATION 之外。如果目標路徑包含產生器表達式,它將被包裝在 $<PATH:CMAKE_PATH,NORMALIZE,...> 產生器表達式中。

此政策是在 CMake 3.31 版本中引入的。它可以由 cmake_policy()cmake_minimum_required() 設定。如果未設定,CMake 會在檢測到如果標準化會不同的路徑時發出警告,並使用 OLD 行為。如果目標路徑包含產生器表達式,則無論值如何,都不會發出此類警告。

注意

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