CMP0135

在 3.24 版本中添加。

当使用 `URL` 下载方法配合 `ExternalProject_Add()` 或 `FetchContent_Declare()` 命令时,CMake 3.23 及更早版本会将解压后内容的修改时间设置为与归档文件中的修改时间相同。当 `URL` 更改时,新归档文件会被下载并解压,但解压后内容的修改时间可能不会比之前的内容新。任何依赖于解压后内容的项目可能不会被重新构建,即使内容可能已经改变。

CMake 3.24 及更高版本倾向于将所有解压后内容的修改时间设置为解压时的当前时间。这确保了任何依赖于解压后内容的项目在 `URL` 更改时都会被重新构建。

`ExternalProject_Add()` 和 `FetchContent_Declare()` 命令的 `DOWNLOAD_EXTRACT_TIMESTAMP` 选项可用于显式指定时间戳应如何处理。当未给出 `DOWNLOAD_EXTRACT_TIMESTAMP` 时,此策略控制默认行为。此策略的 `OLD` 行为是恢复归档文件中的时间戳。`NEW` 行为是将解压后内容的修改时间设置为解压时的当前时间。

此策略引入于 CMake 版本 3.24。可以通过 `cmake_policy()` 或 `cmake_minimum_required()` 进行设置。如果未设置,CMake 会发出警告并使用 `OLD` 行为。

注意

根据定义,策略的 `OLD` 行为是已弃用,并可能在未来的 CMake 版本中被移除。