CMake自定义命令生成非配置文件

CMake custom command to generate a non-config file

我读过:

cmake custom command to copy and rename

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

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

但似乎 cmake -E 不直接支持此功能。我应该做什么(除了 运行 平台相关的东西)?

使用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