查看上次状态更新
初始条件
已经解决了获取输出文件列表、解析输入代码生成文件以获取代码生成输入的完整列表的任务。即 add_custom_command 第一次提供了正确的依赖项集:
add_custom_command(OUTPUT ${generatedSources}
COMMAND ${codegenCommand} ARGS ${codegenArgs}
DEPENDS ${codegenInputFiles})
Run Code Online (Sandbox Code Playgroud)问题场景
缺什么
有没有办法在不重建整个项目的情况下解决这个问题?
更新 - 替代(更好?)问题描述
我在 cmake 邮件列表上发现了类似的未回答的问题,为了更清楚起见,将其发布在这里: http: //article.gmane.org/gmane.comp.programming.tools.cmake.user/52279
我正在尝试让代码生成工具在依赖关系方面与 C 源文件“相同”。我的意思是,假设您有一个 C 文件“ac”。因为它可以#include文件,所以每次内容发生a.c变化,它的依赖关系也可能发生变化。使用 -MMD 重新扫描依赖项。我想要某种方法来为我的代码生成器模拟这一点。首先,我尝试了 add_custom_command,它采用固定的 DEPENDS 列表,在定义自定义命令时确定。具体来说,我的意思是这样的:
function(add_generated_library)
figure_out_dependencies(deps ${ARGN})
add_custom_command(... DEPENDS ${deps})
endfunction()
Run Code Online (Sandbox Code Playgroud)
但这仅捕获构建系统生成时的依赖关系。每次运行自定义命令时,DEPENDS 列表可能需要更改,因为更改可能意味着新的依赖项。我应该如何执行此操作?
更新 2 - 可能的解决方案
以下是我认为的事实 - 网络上有关于 cmake 支持动态依赖关系的声音,这是平滑集成许多重要的代码生成工具所必需的 - 没有现成的最佳解决方案可用,正如我们所见实际上需要的是钩子来添加对自定义 DSL 的支持到 IMPLICIT_DEPENDS
来自cmake手册:
IMPLICIT_DEPENDS 选项请求扫描输入文件的隐式依赖关系。给定的语言指定应使用其相应依赖关系扫描器的编程语言。目前仅支持 C 和 CXX 语言扫描程序。必须为 …