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.ml
、bin/mycompiler
还是只是 mycompiler
,这都会起作用
我是 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.ml
、bin/mycompiler
还是只是 mycompiler
,这都会起作用