CMake:在将文件读取到变量之前,如何确保文件已创建?
我想将当前git提交哈希读入一个变量,并从中生成CMake:在将文件读取到变量之前,如何确保文件已创建?,cmake,Cmake,我想将当前git提交哈希读入一个变量,并从中生成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}
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)
configure_file(version.h.in "${CMAKE_CURRENT_BINARY_DIR}/version.h" @ONLY)
然后生成version.h(此模板使用${GIT\u COMMIT}
变量):
问题是:如何使此文件被读取,并且只有在创建了git commit.txt
之后才能执行configure_file()
命令?有没有一种方法可以生成一个只运行CMake脚本代码的自定义命令/目标
还有一个
execute\u process()
可以直接读入变量,但它没有依赖项
解决方案是简单地使用execute\u 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
模板中使用该输出变量。在配置阶段,通过File()
和configure\u File
命令立即执行文件修改。当执行add\u custom\u command
中指定的命令时,此阶段进入构建阶段。“有没有办法创建一个只运行CMake脚本代码的自定义命令/目标?”-使用类似于${CMake_command}-P的命令
可以在脚本模式下执行给定的CMake脚本,在该模式下,命令文件()
和配置文件()
正常工作。对。我只是想做个太复杂的玩意儿。