【发布时间】:2020-08-30 18:34:52
【问题描述】:
我正在尝试将构建日期嵌入到源文件中,以便每次构建特定目标时都会刷新嵌入日期,而不会在每次构建整个项目时重新生成。
即我有一个头文件builddate.h,它是由具有一组#defines 的命令生成的。然后从其他源文件中包含此头文件。
我的第一次尝试是这样的:
add_custom_target(builddate COMMAND <command that generates header file>)
add_library(mylibrary ...)
add_dependencies(mylibrary builddate)
这样会正确生成头文件,但是每次都会生成头文件,不管mylibrary目标是否需要重建。
尝试使用自定义命令,即
add_custom_command(OUTPUT builddate.h COMMAND <command that generates header file>)
add_library(mylibrary ... builddate.h)
正确生成一次标头,但如果重新构建mylibrary 目标,则不会重新生成标头,因为builddate.h 已经是最新的。
这感觉应该是相当普遍的,但我无法弄清楚自定义命令和目标的什么咒语会给我想要的效果。我想要的是每次构建mylibrary 目标时调用该命令,如果没有任何更改或构建不相关的目标(例如使用mylibrary 的可执行文件),则不会进行虚假重建。
使用PRE_BUILD 自定义命令听起来是个好主意,但文档指出这会在PRE_LINK 命令之前被调用,而不是Visual Studio,即在 源之后编译。这似乎使它不适合此目的,因为在编译源代码时需要标头。
【问题讨论】:
标签: cmake cmake-custom-command add-custom-target