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
我读过:
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