为什么 CMake 不将 "GENERATED" 属性 添加到 "configure_file" 创建的文件中?
Why doesn't CMake add the "GENERATED" property to file created by "configure_file"?
CMake configure_file
命令可用于从模板创建具体文件。调用 configure_file(foo.h.in foo.h)
将生成 foo.h
文件,该文件在 运行 cmake
.
之前不存在
然而,它没有标有 GENERATED
属性。调用 get_source_file_property(is_generated foo.h GENERATED)
returns NOTFOUND
.
我想念的这种行为背后的合理性是什么?
根据文档,源文件 属性 GENERATED 的目的是防止在配置过程中检查文件:
This information is then used to exempt the file from any existence or validity checks.
例如add_executable
如果其源文件之一在配置时不存在,命令可能会发出错误。在尝试构建配置的项目之前,此检查可能会发现问题。
但标有 GENERATED
的文件直到构建阶段才会被检查。
因为configure_file
立即创建文件,所以当此文件用于例如,检查文件是否存在是完全正确的。 add_executable
打电话。
也就是说,没有理由将此文件标记为 GENERATED。
属性 文档中的第一段
Is this source file generated as part of the build or CMake process.
看起来有争议,因为 configure_file
在“CMake 进程”期间创建文件。
可能,通过注释“CMake 过程”,他们想要适应 file(GENERATE)
实际上设置 属性。但是 configure_file
和 file(GENERATE)
关于文件的生成时间有根本的区别:
configure_file
在 CMake 执行 CMakeLists.txt
. 中的下一个命令之前 立即 创建文件
- 但
file(GENERATE)
仅在配置过程结束时 创建文件 ,在所有 CMakeLists.txt
处理完之后。
CMake configure_file
命令可用于从模板创建具体文件。调用 configure_file(foo.h.in foo.h)
将生成 foo.h
文件,该文件在 运行 cmake
.
然而,它没有标有 GENERATED
属性。调用 get_source_file_property(is_generated foo.h GENERATED)
returns NOTFOUND
.
我想念的这种行为背后的合理性是什么?
根据文档,源文件 属性 GENERATED 的目的是防止在配置过程中检查文件:
This information is then used to exempt the file from any existence or validity checks.
例如add_executable
如果其源文件之一在配置时不存在,命令可能会发出错误。在尝试构建配置的项目之前,此检查可能会发现问题。
但标有 GENERATED
的文件直到构建阶段才会被检查。
因为configure_file
立即创建文件,所以当此文件用于例如,检查文件是否存在是完全正确的。 add_executable
打电话。
也就是说,没有理由将此文件标记为 GENERATED。
属性 文档中的第一段
Is this source file generated as part of the build or CMake process.
看起来有争议,因为 configure_file
在“CMake 进程”期间创建文件。
可能,通过注释“CMake 过程”,他们想要适应 file(GENERATE)
实际上设置 属性。但是 configure_file
和 file(GENERATE)
关于文件的生成时间有根本的区别:
configure_file
在 CMake 执行CMakeLists.txt
. 中的下一个命令之前 立即 创建文件
- 但
file(GENERATE)
仅在配置过程结束时 创建文件 ,在所有CMakeLists.txt
处理完之后。