我正在使用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但它自己的快速vapi。对于大型项目而言,这很快变得很麻烦,因为对其他.vapis的更改通常不会影响source1.vala
。因此valac
支持--deps
标志:
valac -C --deps=source1.dep --use-fast-vapi=source2.vapi source1.vapi
这会在source1.dep
中为source1.dep
生成制作风格的依赖关系。例如:
source1.dep: source2.vapi source5.vapi ...
如果我写的是Makefile
,我可以做include source1.dep
。但是,我找不到cmake
的任何类似构造。
如何在cmake
?
答案 0 :(得分:1)
如果没有更改,Vala编译器将不会编写新的C文件。如果您的程序由多个源文件组成并且您重新编译,则Vala编译器将仅更新已更改的C和头文件,然后您的C编译器的依赖关系进程可以接收其余文件。
Vala编译器本身使用make和autotools,它不提供有关Vala编译器和构建系统之间依赖关系的任何信息。调用Vala编译器并生成C文件,然后autotool用于确定C文件依赖关系的方法接管。没有理由不能在CMake中使用逻辑。