【发布时间】:2019-01-21 11:57:43
【问题描述】:
我想将当前的 git commit 哈希读入一个变量并从中生成version.h。这个命令依赖于我的主要目标作为预构建命令,因为version.h必须在构建之前生成:
# Get the current git commit
add_custom_command(
TARGET ${MY_MAIN_TARGET} PRE_BUILD
COMMAND git rev-parse HEAD > git-commit.txt
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
这很好用。现在,我想把它读入一个变量:
file(READ "${CMAKE_BINARY_DIR}/git-commit.txt" GIT_COMMIT)
然后生成version.h(本模板使用${GIT_COMMIT}变量):
configure_file(version.h.in "${CMAKE_CURRENT_BINARY_DIR}/version.h" @ONLY)
问题是:我怎样才能让这个文件被读取并且configure_file() 命令只有在git-commit.txt 被创建之后才会发生?有没有办法制作一个只运行 CMake 脚本代码的自定义命令/目标?
还有execute_process()可以直接读入变量,但没有DEPENDS。
【问题讨论】:
-
文件修改由
file()和configure_file命令在配置阶段立即执行。当执行add_custom_command中指定的命令时,此阶段先于 构建阶段。 “有没有办法制作一个只运行 CMake 脚本代码的自定义命令/目标?” - 使用像${CMAKE_COMMAND} -P <script>这样的COMMAND,您可以在脚本模式 下执行给定的CMake 脚本,在该模式下,命令file()和configure_file()照常工作。 -
对。我只是想制作一个过于复杂的装置。
标签: cmake