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