【发布时间】:2022-01-09 05:06:38
【问题描述】:
CMake configure_file 命令可用于从模板创建具体文件。调用configure_file(foo.h.in foo.h) 将生成foo.h 文件,该文件在运行cmake 之前并不存在。
然而,它没有标记GENERATED 属性。调用get_source_file_property(is_generated foo.h GENERATED) 返回NOTFOUND。
我错过的这种行为背后的原因是什么?
【问题讨论】:
-
GENERATED是在构建阶段创建的文件,但configure_file在配置阶段立即创建一个文件。您也可以将 GENERATED 文件视为无需重新配置项目即可删除的文件。但是删除configure_file的结果后,如果不重新配置,项目将无法构建。 -
@Tsyvarev
GENERATED文档指出“此源文件是作为构建或 CMake 过程的一部分生成的”,configure_file()不是 CMake 过程/配置阶段的一部分吗? -
不确定“CMake 过程”是什么意思。在另一段中,他们说“Makefile 生成器将在
make clean期间删除GENERATED文件。”但我认为没有理由在make clean上删除configure_file的结果。 -
@Tsyvarev 是的,这有点奇怪。他们还提到
file(GENERATE)被标记为GENERATED但它是在配置期间创建的,而不是构建阶段。 -
至少,当您在
CMakeLists.txt中查看使用file(GENERATE)创建的文件时,它是尚未创建:该文件仅在配置过程结束时创建.但是configure_file立即创建文件。