Compilation 如何在OCaml中管理好编译?

Compilation 如何在OCaml中管理好编译?,compilation,ocaml,Compilation,Ocaml,我正在OCaml中学习更复杂的编译 首先,我不是一名C程序员,我真的不知道什么是make,等等。我使用的是MacOSX终端,我也是一名Java程序员 我发现在OCaml中有一些东西,比如ocamlc,ocamlbuild,ocamlfind,oasis,等等。我被它们弄糊涂了 问题1 有人能告诉我应该在ocamlc、ocamlbuild、ocamlfind、oasis中使用哪一个吗 问题2 我试过这个教程,它对ocamlbuild很有用 但是如果我想使用外部库,例如ocaml电池或甘菊,如何

我正在
OCaml
中学习更复杂的编译

首先,我不是一名C程序员,我真的不知道什么是
make
,等等。我使用的是
MacOSX终端,我也是一名Java程序员

我发现在OCaml中有一些东西,比如
ocamlc
ocamlbuild
ocamlfind
oasis
,等等。我被它们弄糊涂了


问题1

有人能告诉我应该在
ocamlc
ocamlbuild
ocamlfind
oasis
中使用哪一个吗


问题2

我试过这个教程,它对
ocamlbuild
很有用

但是如果我想使用外部库,例如
ocaml电池
甘菊
,如何使用
ocamlbuild
链接这些库


问题3

这是一个关于所有外部库的更实际的问题

因此,对于许多ocaml库,我使用
opam install
来安装它们

  • 为什么需要安装库?我的意思是,在Java中,通常我们只是将库复制到某个地方,然后将库的路径包含到
    -classpath
    -cp
    中。那为什么我们需要安装OCaml库呢

  • opam安装
    lib后,例如
    cammile
    (对于utf8),发生了什么以及将发生什么?这种安装是否只是下载库的源文件并将其复制到某个地方

  • 那你怎么能找到图书馆呢?例如,如果我
    opam安装camomile
    ,那么我如何在自己的代码中链接或使用它们

  • 通常如何使用
    ocaml库
    ?例如,对于
    camomile
    (),它们有三个模块:
    CamomileLibrary
    ,等等。所以我应该
    打开代码中的模块,对吗

  • 工具:

    • ocamlc:OCaml到字节码编译器
    • ocamlopt:OCaml到本机代码编译器
    • ocamlfind:围绕ocamlc和ocamlopt的包装器,用于编译/链接各种OCaml包,即使用“ocamlfind ocamlopt-package cammile-c yourfile.ml”使用yourfile.ml进行编译, 您可以使用“ocamlfind ocamlopt-package cammile yourfile.cmx-linkpkg-o yourfile”创建一个可执行文件
    • oasis:一个像autoconf和automake这样的用于C/C++的构建系统生成器,但要简单得多
    使用最新的ocamlbuild,您可以使用“ocamlbuild-use-ocamlfind-pkg-pkg…”作为使用ocamlfind包package1、package2构建项目的快速方法。 下一步是使用“ocamlbuild-use ocamlfind”并将package()指令放入_标记文件中

    然而,我建议尝试oasis,它简化了为项目创建构建系统的过程。 如果您想查看在使用oasis或OCAMLBILD时“幕后”发生了什么,请参阅_build/_日志文件。它包含所有ocamlfind/ocamlc/ocamldep/ocamlopt调用


    opam问题可能属于一个单独的问题。

    谢谢你的回答。我只想清楚地了解整个过程,目前我的头脑一团糟。标记应该在哪里?在项目的根目录中,即运行ocamlbuild的位置。ocamlbuild在当前目录中查找某些文件,如果这些标记用于配置其生成方式。“U标记”用于定义在编译某些文件时要定义的标记(即,要在搜索路径中包含的包、警告标志、调试标志、要链接的包等)。“myocamlbuild.ml”用于在OCaml中定义其他生成规则(OASIS将为您生成一个非常复杂的流程作为起点)。