在CMake中生成的依赖关系文件

7lrncoxx  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(225)

我们有一些源代码处理工具,它们可以从多个“代码段”中生成原始汇编文件。
当从make使用这些工具时,我们可以通过让源代码处理工具发出“依赖文件”来确保最新的构建,就像gcc使用它的-MD标志一样。
例如,假设我有一个程序集模板文件Frob.asmtmpl,以及一个名为asm_templater的模板引擎,它的作用类似于一个增强的C预处理器。
我们运行asm_templater -d Frob.asmtmpl,生成Frob.sFrob.d,后者是一个makefile依赖项片段,如下所示:
Frob.s: Frob.asmtmpl ThingIncludedByFrob.asmincl OtherThingIncluded.asmincl
在一个基于makefile的构建系统中,我们将include(Frob.d)(如果存在的话)告诉make Frob.asmtmpl的 * 实际 * deps是什么。
我们如何为CMake做一些类似的事情呢?似乎CMake的两遍性质(生成然后构建),以及需要支持多代引擎导致了这样的结论:必须有某种原生CMake的方式来做这件事,我还没有弄清楚。
我需要以某种方式向CMake指出Frob.s .和ThingIncludedByFrob.asmincl之间存在依赖关系,但这完全由Frob.asmtmpl的内容决定,因此需要通过工具提取。

nhjlsmyf

nhjlsmyf1#

您可能会对CMake的add_custom_command命令感兴趣。它有两个签名:
第一个签名用于添加自定义命令以生成输出。在同一目录(CMakeLists.txt文件)中创建的目标(该目标将自定义命令的任何输出指定为源文件)被赋予一个规则,以在生成时使用该命令生成该文件。
第二个签章会将自订命令加入至目的,例如程式库或可可执行。这对于在建置目的之前或之后执行作业很有用。命令会成为目的的一部分,而且只有在建置目的本身时才会执行。如果目的已经建置,则不会执行命令。
因此,您可以创建一个自定义命令,将COMMAND asm_templater -d Frob.asmtmplOUTPUTSBYPRODUCTS设置为Frob.s,并将DEPENDS ThingIncludedByFrob.asmincl OtherThingIncluded.asmincl

相关问题