compilation - 如何在 OCaml 中很好地管理编译?

标签 compilation ocaml

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

首先我不是一个C程序员,我真的不知道什么是make等。我使用的是Mac OS X终端而且我也是Java 程序员。

我发现在 OCaml 中,有一些东西,例如 ocamlcocamlbuildocamlfindoasis 等.我对他们感到非常困惑。

<小时/>

问题1

谁能告诉我应该使用 ocamlcocamlbuildocamlfindoasis 中的哪一个?

<小时/>

问题2

我尝试了这个教程http://nicolaspouillard.fr/ocamlbuild/ocamlbuild-user-guide.html ,这对于ocamlbuild很有用。

但是,如果我想使用 ocaml-batteriescamomile 等外部库,如何使用 ocamlbuild 链接这些库?

<小时/>

问题3

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

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

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

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

  3. 那怎样才能找到这个库呢?例如,如果我 opam install camomile,那么如何在我自己的代码中链接或使用它们?

  4. 通常如何使用ocaml库?例如,对于 camomile ( http://camomile.sourceforge.net/dochtml/index.html ),它们具有三个模块:CamomileLibrary 等。所以我应该在我的代码中open 该模块,对吗?

最佳答案

工具:

  • ocamlc:OCaml 到字节码编译器
  • ocamlopt:OCaml 到 native 代码编译器
  • ocamlfind:ocamlc 和 ocamlopt 的包装器,用于编译/链接各种 OCaml 包,即您使用“ocamlfind ocamlopt -package camomile -c yourfile.ml”来编译 yourfile.ml, 然后使用“ocamlfind ocamlopt -package camomile yourfile.cmx -linkpkg -o yourfile”创建可执行文件
  • oasis:类似于 autoconf&automake 的 C/C++ 构建系统生成器,但更简单

通过最近的 ocamlbuild,您可以使用“ocamlbuild -use-ocamlfind -pkg -pkg ...”作为使用 ocamlfind 包 package1、package2 构建项目的快速方法。 下一步是使用“ocamlbuild -use-ocamlfind”并将 package() 指令放入 _tags 文件中。

但是我建议尝试 oasis,它简化了为您的项目创建构建系统的过程。 如果您想了解使用 oasis 或 ocamlbuild 时“幕后”发生的情况,请参阅 _build/_log 文件。它包含所有 ocamlfind/ocamlc/ocamldep/ocamlopt 调用。

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

关于compilation - 如何在 OCaml 中很好地管理编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195873/

相关文章:

functional-programming - OCaml 将标记函数作为参数/标记函数类型等价传递

ocaml - 如何在 OCaml 中下载、解压缩和处理 gzip 文件?

module - 理解 OCaml 中的仿函数

enums - 如何在 typescript 中定义和使用枚举?

C编译: relocation truncated to fit R_X86_64_PC32 against symbol

c - uboot编译错误

xcode - XCode-ml.hpp中的#include <map>:没有这样的文件或目录

ocaml - 从控制台检查库 (.cma) 签名

c++ - 如何使用类型级函数动态创建静态类型?

Java varargs - 为什么这些语法 Not Acceptable ?