代码之家  ›  专栏  ›  技术社区  ›  jpo38

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

  •  1
  • jpo38  · 技术社区  · 6 年前

    我正在从CMake脚本为QtCreator生成.pro文件。稍后将使用QMAKE_EXTRA_编译器指令生成项目中的文件(仅当该文件比其他文件旧时,才使用外部工具从其他文件重新生成)。

    • 为了确保要生成的文件在没有警告的情况下导入到QtCreator项目中,我需要创建它(否则QtCreator在分析.pro文件时会报告警告)。
    • 为了确保文件在第一次编译时生成,我需要将时间戳更改为非常旧(比用于生成它的任何输入文件都旧)。这对于QMAKE_EXTRA_编译器来说是必需的,以便将文件视为需要重新生成的文件。

    为此,我:

    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(0 m45s与1 m30s)。我敢打赌,一个外部进程的执行正在减缓事情的发展。。。。

    有没有什么方法可以使用纯CMake命令更改文件时间戳?

    1 回复  |  直到 6 年前
        1
  •  0
  •   KamilCuk    6 年前

    cmake内置命令是首选方法。你可以 touch 文件使用:

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

    这也适用于任何平台,独立于linux或windows。

    如果您有“数百个文件”,则可以通过提供带有多个参数的touch命令在一个语句中触摸它们,从而节省运行make/build系统命令的时间(对于cmake build system:,要解决的依赖关系更少)。