1

我读了:

cmake自定义命令复制和重命名

我想做类似的事情,但不是复制文件,而是生成一个文件。如果那不在自定义命令中,我会写:

file(WRITE "generated.c" "int main() { return 0; }")

但它似乎并不cmake -E直接支持这一点。我应该怎么做(除了运行依赖于平台的东西)?

4

1 回答 1

1

使用 CMake 的脚本模式 ( -P)。在CMakeLists.txt

cmake_minimum_required(VERSION 3.21)
project(test)

file(
  GENERATE
  OUTPUT "gen.cmake"
  CONTENT [[
cmake_minimum_required(VERSION 3.21)
file(WRITE "${OUT}" "int main() { return 0; }")
]])

add_custom_command(
  OUTPUT generated.c
  COMMAND ${CMAKE_COMMAND} -DOUT=generated.c 
          -P gen.cmake
  DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/gen.cmake"
)

add_executable(main "${CMAKE_CURRENT_BINARY_DIR}/generated.c")

请注意,如果您生成的文件具有与配置相关的内容,那么您必须$<CONFIG>在文件名中包含某处。有关更多详细信息,请参阅此处的文档:https ://cmake.org/cmake/help/latest/command/file.html#generate

于 2021-10-25T22:24:19.967 回答