我是OCaml的新手,但我想从Node中找出相当于__filename
,__dirname
的内容。也就是说,我需要为包含相关代码的文件构建路径 relative 。
作为参考,我正在通过Ghuloum的IACC:http://ell.io/tt$ocameel
我正在构建我的第一个编译器,并且在编译器的源代码旁边有一个完全简单的“运行时”文件(在C - temporarily中)。我需要能够将路径传递给此文件,作为参数(或我预测的预编译版本)到gcc
或我的链接器,以便在调用链接器时将其链接到我的编译器输出/汇编工具。
(这可能是一个愚蠢的问题 - 我在这里有点未知 - 未知,“编译器如何将运行时连接到链接器”,或类似的东西。关于惯用解决方案的评论是受欢迎的,即使它不是对上述问题的直接答案!)
答案 0 :(得分:2)
如果您通过ocaml myfile.ml
直接运行源文件,Sys.argv.(0)
将为您提供源文件的路径,您可以使用Filename.dirname
从该文件中获取目录
如果您首先将源文件编译为可执行文件然后运行可执行文件,Sys.argv.(0)
将为您提供可执行文件的名称。在那种情况下,无法获取源代码的位置(特别是如果您认为运行可执行文件的人甚至可能在其系统上没有源代码)。
如果您设置项目结构,以便您的源存储在src /,bin中的已编译二进制文件和lib /中编译的stdlib,您可以使用Filename.dirname Sys.argv.(0) ^ "../lib"
作为{{的库路径1}}。在将所有内容安装到gcc
或ocaml src/mycompiler.ml
之后,无论您运行bin/mycompiler
,mycompiler
还是仅/usr/
,这都会有效。