【发布时间】:2021-12-11 08:21:33
【问题描述】:
我读过:
cmake custom command to copy and rename
我想做类似的事情,但不是复制文件,而是生成一个文件。如果那不在自定义命令中,我会写:
file(WRITE "generated.c" "int main() { return 0; }")
但cmake -E 似乎并不直接支持这一点。我应该怎么做(除了运行依赖于平台的东西)?
【问题讨论】:
我读过:
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
【讨论】:
generated.c。