鉴于非同构结构的混合语言代码库,指定元数据以推动Shake构建系统的推荐方法是什么?
特别是,元数据应描述源语言(C ++,C#,Fortran),源文件,结果类型(静态/动态库,可执行文件),编译器开关(每个工件可能不同)等。
优选地,元数据应该被简单地构造并且每个工件存储在一个单独的文件中。
是否有一种明智的方式来概括Defining your own build system with Shake中建议的方法?
答案 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预处理器为您提供#include
,#define
和#ifdef
,所有这些都可用于更复杂的结构化元数据。您可以通过首先在元数据文件上调用mono compiler来将其与Shake一起使用。
虽然建议进行前两次调整,但CPP的使用最初用于#include
。现在内置的Shake元数据有一个包含机制,我不确定我是否会对CPP感到烦恼,这会使事情变得更简单。