1

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

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

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

有没有一种聪明的方法来概括使用 Shake 定义自己的构建系统中建议的方法?

4

1 回答 1

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

我倾向于使用特殊的前导字符。在上面的例子中,我用来-表示标志(通常逐字传递),并+表示从包含有用特殊情况的枚举中进行的选择(例如,使用单声道编译器)。

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

使用 C 预处理器 (CPP)

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

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

于 2015-11-19T19:32:17.250 回答