是否可以创建一个cmake脚本来生成构建,该脚本处理在构建时生成的未知文件?

时间:2012-02-03 20:44:16

标签: makefile code-generation cmake

我有一个系统可以从规范文档中生成生成的代码,该代码可以随时更改。因此,生成的文件列表不能是静态的,并且必须能够在构建时动态处理。

据我所知,典型的CMakeLists.txt设置为在cmake生成时为每个文件定义规则。

有没有办法让CMake编写通用规则,以便可以在构建时设置目标?

如果没有,可能的解决办法是什么?

1 个答案:

答案 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,而不会运行完整的配置过程。