OCaml:如何获取*当前模块*/我的项目目录的路径?

OCaml: How can I get the path to the *current module* / my project's directory?

我是 OCaml 的新手,但我正在尝试从 Node 中找出 __filename__dirname 的等价物。也就是说,我需要为包含相关代码的文件构建路径 relative


作为参考,我正在研究 Ghuloum 的 IACC:http://ell.io/tt$ocameel

我正在构建我的第一个编译器,我有一个非常简单的“运行时”文件(在 C 中 — temporarily)与编译器的源代码相邻。我需要能够将此文件的路径作为参数(我想是预编译版本)传递给 gcc 或我的链接器,以便在我调用 linker/assembler 工具.

(这可能是一个愚蠢的问题——我在这里有点未知,“编译器如何将运行时 获取到 链接器”,或者类似的东西。欢迎任何关于惯用解决方案的评论,即使它不是对上述问题的直接回答!)

如果您 运行 直接通过 ocaml myfile.ml 下载源文件,Sys.argv.(0) 将为您提供源文件的路径,您可以使用 Filename.dirname从中获取目录。

如果您先将源文件编译成可执行文件,然后 运行 可执行文件,Sys.argv.(0) 将为您提供可执行文件的名称。在那种情况下,不可能获得源代码的位置(特别是如果您认为 运行 执行可执行文件的人甚至可能在他们的系统上没有源代码)。

如果您设置项目结构,使您的源位于 src/,编译后的二进制文件位于 bin/ 中,编译后的标准库位于 lib/ 中,您可以只使用 Filename.dirname Sys.argv.(0) ^ "../lib" 作为库路径gcc。在将所有内容安装到 /usr//usr/local/.

之后,无论您是 运行 ocaml src/mycompiler.mlbin/mycompiler 还是只是 mycompiler,这都会起作用