从多个文件编译SML项目

8
我有一个包含许多文件的项目,希望它能与大多数流行的编译器一起使用。

不幸的是,PolyML和SML/NJ需要use命令,而MosML则需要使用load来明确加载基础库结构,这被poly或sml所不认可。

此外,MLton和MLKit需要完全不同的.mlb文件,只列出文件名,并且需要明确导入基础库,这要比MosML使用的方式更为复杂:

$(SML_LIB)/basis/basis.mlb

有没有一些标准通用的“包含此文件”命令?如果不存在,是否有其他方法使所有编译器从一个入口文件中读取?
附言:不介意有人对编译器差异进行小小的抱怨。我总是对人们的想法感兴趣,而且没有太多信息可供参考 :-)
1个回答

6

使用函数是标准的通用“包含此文件”的命令,包含在顶层环境中。

val use : string -> unit    implementation dependent

我通常使用smlnj的CM来维护构建环境,然后使用cm2mlb转换为mlb。在解析sources.cm文件时,它会定义一个名为MLton的标志,你可以使用它来解决模块加载行为的差异。

#if(defined(MLton))
runmain.sml
#endif

还有一套sml-buildscripts可将mlb转换为polyml。我不熟悉它们或者polyml,但CM是很方便的权威来源,因为它通过结构CM提供了从SML编程的程序化访问。

这就是cm2mlb使用的内容。所以虽然我不知道是否已经存在可以将CM转换为Polyml的东西,但这应该是可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接