CMake:在将文件读取到变量之前,如何确保已创建文件?

时间:2019-01-21 11:57:44

标签: cmake

我想将当前的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

1 个答案:

答案 0 :(得分:0)

解决方案是像这样简单地使用execute_process

# Get the current commit
execute_process(
  COMMAND git rev-parse HEAD
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  OUTPUT_VARIABLE GIT_COMMIT
  OUTPUT_STRIP_TRAILING_WHITESPACE
)

..然后在version.h.in模板中使用该输出变量。