CMake:如果文件相同,configure_file() 不会触及?

CMake: configure_file() does not touch if the file is the same?

通过检查示例文件out.txt前后运行configure_file(in.txt out.txt)的时间戳,似乎最后修改日期没有改变,当新内容相同时out.txt 文件已经存在(因此当变量相同时)。

真的有保证吗?我在 CMake 文档中找不到这个。

Is it really true and guaranteed? I can't find about this in CMake documentation.

你在这里部分回答了你自己的问题:如果没有记录,肯定不能保证。幸运的是,它 记录在案,这里:https://cmake.org/cmake/help/latest/command/configure_file.html

If the input file is modified the build system will re-run CMake to re-configure the file and generate the build system again. The generated file is modified and its timestamp updated on subsequent cmake runs only if its content is changed.

在内部,configure_file 将其输出写入临时文件,然后调用 cmake -E copy_if_different 的等效项。也就是说,它会进行 byte-for-byte 比较,并且仅在存在差异时才进行复制(从而更新时间戳)。

您可以在此处查看来源:https://github.com/Kitware/CMake/blob/f0a2ec12e2743a7be39201e2bc563ab37debd791/Source/cmMakefile.cxx#L3836