cmake - 如何从 CMake 更改文件时间戳?
问题描述
我正在从 CMake 脚本为 QtCreator 生成 .pro 文件。稍后将使用 QMAKE_EXTRA_COMPILERS 指令生成项目中的文件(仅当文件比它们旧时,才使用外部工具从其他文件重新生成文件)。
- 为了确保要生成的文件在没有警告的情况下导入到 QtCreator 项目中,我需要创建它(否则 QtCreator 在解析 .pro 文件时会报告警告)。
- 为了确保文件在第一次编译时生成,我需要将时间戳更改为非常旧(比用于生成它的任何输入文件都旧)。这对于 QMAKE_EXTRA_COMPILERS 需要考虑文件需要重新生成。
为此,我这样做:
file(WRITE ${output_file_path} "To be generated..." )
execute_process( COMMAND touch.exe ${output_file_path} -t 0001010101 )
但是,这execute_process( COMMAND touch.exe ${output_file_path} -t 0001010101 )
需要一段时间。我的项目中有数百个这样的文件,并且评论这一execute_process
行将我的 CMake 生成时间除以 2(0m45s 与 1m30s)。我敢打赌,外部进程的执行正在减慢速度......
有没有办法使用纯 CMake 命令更改文件时间戳?
解决方案
cmake 内置命令是首选方式。您可以touch
使用以下文件进行归档:
execute_process(COMMAND ${CMAKE_COMMAND} -E touch ${output_file_path} -t 0001010101)
这也适用于任何平台,独立于 linux 或 windows。
如果您有“数百个文件”,您可以通过提供带有多个参数的 touch 命令在一个语句中触摸它们,从而节省运行 make/build 系统命令的时间(更少的依赖关系来解决 cmake 构建系统:)。
推荐阅读
- python-3.6 - s.bind((host,port)) - 提供节点名或服务名,或在 Python 3.6 中未知
- lua - Lua - 从字符串中提取索引
- node.js - 节点快速发送功能不适用于二进制数据
- dependency-injection - 如果没有 @Provides-annotated 方法就无法提供 -- Confuseddddd
- android - 如果 Unity 将在 apk 中包含代码块,如果我将它写在“UNITY_EDITOR”中
- xml -
不断返回 null,尽管显然有一个值 - python - 在 python 中列出类型的一些说明
- ajax - 批处理 AJAX 请求到 REST 端点
- java - java.net.ConnectException:连接被 eureke-server 拒绝
- c++ - 找不到.DDS 纹理的fourCC 格式