是否可以在cmake中包含生成的make-style(不是cmake-style)依赖项文件?

我正在使用 Vala,它首先编译为C,然后正常从C编译.

valac(Vala编译器)的一个特性是为.vala文件生成“fast-vapi”. fast-vapi本质上是.vala文件的生成头文件.快速vapis的意义在于它们允许增量构建.

因此,构建项目的简化命令序列如下所示:

valac --fast-vapi=source1.vapi source1.vala # generate source1.vapi
valac --fast-vapi=source2.vapi source2.vala # generate source2.vapi
valac -C --use-fast-vapi=source2.vapi source1.vapi # generate source1.c
valac -C --use-fast-vapi=source1.vapi source2.vapi # generate source2.c

在编写source1.c的cmake依赖项时,一种方法是依赖于每个fast-vapi而不是它自己的.对于大型项目来说,这很快变得很麻烦,因为对其他.vapis的更改通常不会影响source1.vala.所以valac支持–deps标志:

valac -C --deps=source1.dep --use-fast-vapi=source2.vapi source1.vapi

这会在source1.dep中为source1.dep生成make-style依赖项.例如:

source1.dep: source2.vapi source5.vapi ...

如果我正在编写一个普通的Makefile,我可以简单地包含source1.dep.但是,我找不到任何类似的cmake结构.

如何在cmake中包含生成的make样式依赖项文件?

解决方法

如果没有更改,Vala编译器将不会编写新的C文件.如果您的程序由多个源文件组成并且您重新编译,则Vala编译器将仅更新已更改的C和头文件,然后您的C编译器的依赖关系进程可以获取其余文件.

Vala编译器本身使用make和autotools,它不提供有关Vala编译器和构建系统之间依赖关系的任何信息.调用Vala编译器并生成C文件,然后autotool用于确定C文件依赖关系的方法接管.没有理由不能在CMake中使用逻辑.

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...