如何指定非平凡的元数据来驱动抖动构建系统?

时间:2015-11-18 18:40:16

标签: configuration shake-build-system

鉴于非同构结构的混合语言代码库,指定元数据以推动Shake构建系统的推荐方法是什么?

特别是,元数据应描述源语言(C ++,C#,Fortran),源文件,结果类型(静态/动态库,可执行文件),编译器开关(每个工件可能不同)等。

优选地,元数据应该被简单地构造并且每个工件存储在一个单独的文件中。

是否有一种明智的方式来概括Defining your own build system with Shake中建议的方法?

1 个答案:

答案 0 :(得分:1)

演示文稿的方法相当远 - 我已经将它用于大型多语言项目。我在演讲之外使用了三个调整:

添加文件扩展名

通常,文件扩展名为您提供源语言和结果类型。例如:

mycsharp.dll = foo.cs bar.cs
myfortran.exe = main.f90 util.f90
docs.pdf = docs.tex references.bib

现在,您可以使用完全不同的规则来解释Fortran可执行文件,C#可执行文件(或dll)和PDF文档。

添加一些“前导”字符

通常您需要有关标志或其他命令行相关数据的数据。例如:

mycsharp.dll = foo.cs bar.cs -define:DEBUG -optimize +mono

我倾向于使用特殊的主角。在上面的例子中,我使用-表示标志(通常逐字传递),+表示从包含有用特殊情况的枚举中选择(例如使用{{3} }})。

提醒一句,不要使用太多奇怪的领导特殊字符,否则你最终会发明自己的语言 - 保持简单。

使用C预处理器(CPP)

C预处理器为您提供#include#define#ifdef,所有这些都可用于更复杂的结构化元数据。您可以通过首先在元数据文件上调用mono compiler来将其与Shake一起使用。

虽然建议进行前两次调整,但CPP的使用最初用于#include。现在内置的Shake元数据有一个包含机制,我不确定我是否会对CPP感到烦恼,这会使事情变得更简单。