Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:在将文件读取到变量之前,如何确保文件已创建?_Cmake - Fatal编程技术网

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

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}

我想将当前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}
)
这个很好用。现在,我想把它读入一个变量:

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脚本,在该模式下,命令
文件()
配置文件()
正常工作。对。我只是想做个太复杂的玩意儿。