我正在尝试将构建日期嵌入到源文件中,以便每次构建特定目标时都会刷新嵌入日期,而不会在每次构建整个项目时重新生成。
即我有一个由具有一组sbuilddate.h
的命令生成的头文件。#define
然后从其他源文件中包含此头文件。
我的第一次尝试是这样的:
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 以外的生成器的命令之前调用,即在编译源代码之后。这似乎会使这不适合此目的,因为在编译源代码时需要标头。