【问题标题】:Basic Oasis or Opam file for a simple OCaml project用于简单 OCaml 项目的基本 Oasis 或 Opam 文件
【发布时间】:2015-03-09 13:55:22
【问题描述】:

我是 OCaml 的新用户。我已经要求a question 学习如何建立一个基本的 OCaml 项目,但我仍然有问题。跳转到最后一个 TL;DR

例如,我正在尝试学习 Irmin。在home page of Irmin 我看到我必须这样做

opam install irmin git cohttp

这样做,我最终得到了 Irmin 版本 0.8.3。不幸的是,我不能效仿他们的例子,因为显然 Irmin 的版本是 0.9.4,而且看起来 API 已经改变了。所以,我想开始一个干净的项目,只依赖 Irmin 0.9.4

首先,我设置了一个 opam 开关

 opam switch install playground -A 4.02.1

确保从头开始工作。然后,我创建了一个基本的_oasis 文件,如下所示

OASISFormat: 0.4
Name:        Playground
Version:     0.1.0
Synopsis:    OCaml playground
Authors:     Andrea Ferretti
License:     Apache-2.0
BuildTools: ocamlbuild

BuildDepends:
  irmin,
  irmin.unix,
  lwt,
  lwt.unix

然后我复制了 Irmin 主页example.ml 中的示例。

open Lwt
open Irmin_unix
let store = Irmin.basic (module Irmin_git.FS) (module Irmin.Contents.String)
let config = Irmin_git.config ~root:"/tmp/irmin/test" ~bare:true ()
let prog =
  Irmin.create store config task >>= fun t ->
  Irmin.update (t "Updating foo/bar")  ["foo"; "bar"] "hi!" >>= fun () ->
  Irmin.read_exn (t "Reading foo/bar") ["foo"; "bar"] >>= fun x ->
  Printf.printf "Read: %s\n%!" x;
  return_unit
let () = Lwt_main.run prog

如果我先oasis setup 然后ocamlbuild example.ml 我得到一堆错误

W: Cannot get variable ext_obj
W: Cannot get variable ext_lib
W: Cannot get variable ext_dll
W: Cannot get variable ocamlfind

简而言之,我的问题是:

建立一个依赖于 Irmin 0.9.4 的干净项目的最简单方法是什么,确保它是自包含的(它不会依赖于构建过程安装的库以外的预安装库)?

【问题讨论】:

  • Irmin 在官方存储库中被标注为 0.9.3。是您的问题中的拼写错误还是您很长时间都忘记了opam update
  • 他也可能有一些依赖项迫使他降级。虽然,我在安装大量软件包的情况下安装它没有问题。
  • 当您没有 aspcud 时,这是一个常见的问题。很多时候它会降级所有内容。

标签: ocaml ocamlbuild opam oasis


【解决方案1】:

首先,您的_oasis 文件中没有任何活动目标。我的意思是,OASIS 是关于构建可执行文件和库的。你也没有描述。这意味着,您的 BuildDepends 没有任何效果,因为它只对 LibraryExecutable 条目有意义。因此,第一个近似值如下:

OASISFormat: 0.4
Name:        Playground
Version:     0.1.0
Synopsis:    OCaml playground
Authors:     Andrea Ferretti
License:     Apache-2.0
BuildTools:   ocamlbuild
BuildDepends: irmin.unix, lwt.unix

Executable "example"
  Path: .
  MainIs: example.ml
  CompiledObject: best

这样做,我最终得到了 Irmin 版本 0.8.3。不幸的是,我不能 遵循他们的示例,因为显然 Irmin 的版本为 0.9.4, 看起来API已经改变了。所以,我想开始一个 仅依赖 Irmin 0.9.4 的干净项目

如果您的版本不是最新的,那么您可以尝试说服 opam 约束求解器您确实需要该特定版本,例如:

 opam install irmin.0.9.4 git cohttp

另外,opam 内部约束求解器不是很复杂,因此请确保您的系统上安装了 aspcud。以下将在全新的 ubuntu 安装上安装带有 aspcud 的最新 opam:

sudo add-apt-repository --yes ppa:avsm/ppa
sudo apt-get update
sudo apt-get --yes install opam

建立一个依赖于 Irmin 0.9.4 的干净项目的最简单方法是什么,确保它是自包含的(它不会依赖 预安装的库,而不是构建安装的库 过程)?

嗯,简单是个人意见的问题。例如,您可以在没有任何绿洲的情况下执行相同的操作,只需使用 opam 文件,在其中将您的 build 字段设置为 ["ocamlbuild"; "-use-ocamlfind"; "-pkgs irmin.unix,lwt.unix"; "example.native"],但它的扩展性如何......

【讨论】:

  • 谢谢你,你真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2022-04-28
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2010-12-01
相关资源
最近更新 更多