我试图在OCaml编译器和toplevel中使用ocamlfind。据我所理解,我需要将所需的库放在项目的根目录下的_tags文件中,以便ocamlfind工具负责加载它们--允许我在模块中打开它们,如下所示:
open Sdl
open Sdlvideo
open Str目前,我的_tags文件如下所示:
<*>: pkg_sdl,pkg_str显然,我可以使用ocamlc或ocamlopt参数启动ocamlfind命令,条件是我不想编译我的项目,但我没有看到以同样的方式启动toplevel的选项。有没有办法做到这一点(比如"ocamlfind ocaml")?
我也不知道如何将我的项目特定模块放在_tags文件中:假设我有一个模块名Land。我目前正在使用#use "land.ml"指令打开文件并加载模块,但有人认为这不是一个好做法。我应该在_tags中使用什么语法来指定ocamlfind应该加载它(考虑到land.ml不在ocamlfind搜索路径中)?
谢谢你查理·P
编辑:根据这篇文章的第一个答案,_tags文件不能与ocamlfind一起使用。上面的问题仍然存在,列表中只有一个新的问题:指定ocamlfind库的正确方法是什么?
发布于 2010-01-08 12:13:48
试试这个:
$ cat >> .ocamlinit
#use "topfind";;
#require "sdl";;
#require "sdlvideo";;
open Sdl
open Sdlvideo;;
open Str;;.ocamlinit来源于当前目录,返回到/home/user/.ocamlinit。您可以通过ocaml -init <filename>显式覆盖它。
发布于 2010-01-13 13:29:19
应该区分ocamlfind包、模块名称和文件名。源代码仅引用模块名称。模块由.cma .cmo .cmx (和.cmi)文件提供。Ocamlfind包被命名为这类文件的集合(从一些ocaml库源构建的二进制文件)。Ocamlfind对于构建一个项目来说并不是绝对必要的--只要通过-I指定所有使用过的库的路径即可。但是,如果这个项目是以源的形式发布的--另一个人将很难构建它,这将导致使用过的库被放置在不同的地方。然后,我们寻找一种方法来指定使用的“第三方代码段”的名称,以及一些外部工具来将这些名称解析为实际路径。这个工具是ocamlfind。
sdl.
ocamlfind list,很可能包名为和ocamlfind ocamlc -package <package name> -linkpkg source.ml -o programocamlfind query <package name>)提供的.cma文件(和其他文件)的路径,并在构建工具(普通Makefile、ocamlbuild )中使用此路径,etc).请记住,在库名(纯人为目标名称,例如ocaml-extlib)、模块名称(ExtLib、Enum、IO等)、文件名(extLib.cma)和ocamlfind包名(extlib)之间没有一对一的严格形式关系,不过为了方便包维护人员和库作者通常选择可猜测的名称:)
发布于 2010-01-07 19:54:31
_tags文件不是用于ocamlfind的,而是用于ocamlbuild的。实例: ocamlbuild land.native
https://stackoverflow.com/questions/2023173
复制相似问题