我有一个系统可以从规范文档中生成生成的代码,该代码可以随时更改。因此,生成的文件列表不能是静态的,并且必须能够在构建时动态处理。
据我所知,典型的CMakeLists.txt设置为在cmake生成时为每个文件定义规则。
有没有办法让CMake编写通用规则,以便可以在构建时设置目标?
如果没有,可能的解决办法是什么?
答案 0 :(得分:1)
首先,您可以将代码生成过程以目标形式(add_custom_command)放入CMakeLists.txt中,然后使您的目标依赖于此命令。每次发出make
时都会运行代码生成步骤。
或者,这是一个黑客:
add_custom_target(cmake_regen ALL
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/CMakeFiles/Makefile.cmake)
一个不那么强硬的变种,应该保留已经建立的目标:
add_custom_target(cmake_regen ALL
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target rebuild_cache)
将此类代码添加到CMakeLists.txt会强制CMake在每次运行时重新生成makefile,而不会运行完整的配置过程。