我们有一些源代码处理工具,它们可以从多个“代码段”中生成原始汇编文件。
当从make
使用这些工具时,我们可以通过让源代码处理工具发出“依赖文件”来确保最新的构建,就像gcc
使用它的-MD
标志一样。
例如,假设我有一个程序集模板文件Frob.asmtmpl
,以及一个名为asm_templater
的模板引擎,它的作用类似于一个增强的C预处理器。
我们运行asm_templater -d Frob.asmtmpl
,生成Frob.s
和Frob.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
的内容决定,因此需要通过工具提取。
1条答案
按热度按时间nhjlsmyf1#
您可能会对CMake的
add_custom_command
命令感兴趣。它有两个签名:第一个签名用于添加自定义命令以生成输出。在同一目录(CMakeLists.txt文件)中创建的目标(该目标将自定义命令的任何输出指定为源文件)被赋予一个规则,以在生成时使用该命令生成该文件。
第二个签章会将自订命令加入至目的,例如程式库或可可执行。这对于在建置目的之前或之后执行作业很有用。命令会成为目的的一部分,而且只有在建置目的本身时才会执行。如果目的已经建置,则不会执行命令。
因此,您可以创建一个自定义命令,将
COMMAND asm_templater -d Frob.asmtmpl
、OUTPUTS
或BYPRODUCTS
设置为Frob.s
,并将DEPENDS ThingIncludedByFrob.asmincl OtherThingIncluded.asmincl