首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"ocamlfind“使OCaml编译器和toplevel查找(特定于项目的)库

使用"ocamlfind“使OCaml编译器和toplevel查找(特定于项目的)库
EN

Stack Overflow用户
提问于 2010-01-07 19:48:55
回答 3查看 3.8K关注 0票数 4

我试图在OCaml编译器和toplevel中使用ocamlfind。据我所理解,我需要将所需的库放在项目的根目录下的_tags文件中,以便ocamlfind工具负责加载它们--允许我在模块中打开它们,如下所示:

代码语言:javascript
复制
open Sdl
open Sdlvideo
open Str

目前,我的_tags文件如下所示:

代码语言:javascript
复制
<*>: pkg_sdl,pkg_str

显然,我可以使用ocamlc或ocamlopt参数启动ocamlfind命令,条件是我不想编译我的项目,但我没有看到以同样的方式启动toplevel的选项。有没有办法做到这一点(比如"ocamlfind ocaml")?

我也不知道如何将我的项目特定模块放在_tags文件中:假设我有一个模块名Land。我目前正在使用#use "land.ml"指令打开文件并加载模块,但有人认为这不是一个好做法。我应该在_tags中使用什么语法来指定ocamlfind应该加载它(考虑到land.ml不在ocamlfind搜索路径中)?

谢谢你查理·P

编辑:根据这篇文章的第一个答案,_tags文件不能与ocamlfind一起使用。上面的问题仍然存在,列表中只有一个新的问题:指定ocamlfind库的正确方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2010-01-08 12:13:48

试试这个:

代码语言:javascript
复制
$ cat >> .ocamlinit
#use "topfind";;
#require "sdl";;
#require "sdlvideo";;

open Sdl
open Sdlvideo;;
open Str;;

.ocamlinit来源于当前目录,返回到/home/user/.ocamlinit。您可以通过ocaml -init <filename>显式覆盖它。

票数 4
EN

Stack Overflow用户

发布于 2010-01-13 13:29:19

应该区分ocamlfind包、模块名称和文件名。源代码仅引用模块名称。模块由.cma .cmo .cmx (和.cmi)文件提供。Ocamlfind包被命名为这类文件的集合(从一些ocaml库源构建的二进制文件)。Ocamlfind对于构建一个项目来说并不是绝对必要的--只要通过-I指定所有使用过的库的路径即可。但是,如果这个项目是以源的形式发布的--另一个人将很难构建它,这将导致使用过的库被放置在不同的地方。然后,我们寻找一种方法来指定使用的“第三方代码段”的名称,以及一些外部工具来将这些名称解析为实际路径。这个工具是ocamlfind。

sdl.

  • Compile

  • 首先找到提供所需模块的ocamlfind包(在本例中,Sdl和Sdl视频-只需运行ocamlfind list,很可能包名为和ocamlfind ocamlc -package <package name> -linkpkg source.ml -o program
  • Alternatively use ocamlfind,用于提取到包(ocamlfind query <package name>)提供的.cma文件(和其他文件)的路径,并在构建工具(普通Makefile、ocamlbuild )中使用此路径,etc).
  • Moreover ocamlfind (意在)消除了记住实际的.cma文件是如何命名的负担,以及需要哪些匹配的编译器选项,以及包之间的依赖顺序。一个只需要指定包名.

请记住,在库名(纯人为目标名称,例如ocaml-extlib)、模块名称(ExtLibEnumIO等)、文件名(extLib.cma)和ocamlfind包名(extlib)之间没有一对一的严格形式关系,不过为了方便包维护人员和库作者通常选择可猜测的名称:)

票数 4
EN

Stack Overflow用户

发布于 2010-01-07 19:54:31

_tags文件不是用于ocamlfind的,而是用于ocamlbuild的。实例: ocamlbuild land.native

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2023173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档