如何从CMake更改文件时间戳?

时间:2018-07-10 10:20:40

标签: 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命令更改文件时间戳?

1 个答案:

答案 0 :(得分:0)

cmake内置命令是首选方法。您可以使用以下方法touch个文件

execute_process(COMMAND ${CMAKE_COMMAND} -E touch ${output_file_path} -t 0001010101)

这也适用于任何平台,独立于Linux或Windows。

如果您有“数百个文件”,则可以通过为touch命令提供多个参数来在一条语句中进行触摸,从而节省了运行make / build系统命令的时间(较少依赖项来解决cmake构建系统:)。