标签: ocamlbuild

告诉ocamlbuild使用Core

在我的项目中,我有一个使用Core.Std的文件,所以我已经运行了

opam install core
Run Code Online (Sandbox Code Playgroud)

并补充说

open Core.Std
Run Code Online (Sandbox Code Playgroud)

在我的档案中.

我跑的时候

ocamlbuild myprogram.native
Run Code Online (Sandbox Code Playgroud)

它说:

Error: Unbound module Core
Run Code Online (Sandbox Code Playgroud)

指向上面的open语句.

所以,我试试这个:

ocamlbuild -use-ocamlfind -pkgs core.std myprogram.native
Run Code Online (Sandbox Code Playgroud)

并获得以下消息:

ocamlfind: Package `core.std' not found
Run Code Online (Sandbox Code Playgroud)

所以我想也许我需要运行opam install core.std,但显然根据opam没有这样的东西.我也试过"打开Core.Std ;;" 在ocaml repl中,但这也不起作用.有任何想法吗?

ocaml ocamlbuild

5
推荐指数
2
解决办法
1191
查看次数

_tags文件与OCaml的目的是什么,以及如何解释内容?

构建使用列表理解帖子的OCaml代码,我可以使用较少的构建选项_tags来执行文件ocamlbuild.

$ cat _tags
<**/*> : package(camlp4),syntax(camlp4o),package(pa_comprehension)
Run Code Online (Sandbox Code Playgroud)

电池介绍,我还需要有_tags文件来使用电池包.

<*>: package(batteries)
Run Code Online (Sandbox Code Playgroud)

为什么第一个示例<**/*>在第二个示例使用时使用<*>?一般来说,ocamlbuild中_tags文件的目的是什么?你有一些很好的教程吗?

ocaml ocamlbuild

5
推荐指数
1
解决办法
1018
查看次数

使用带有ocamlbuild的外部库

我正在尝试使用ocamlbuild而不是make,但我无法正确链接我的目标文件与外部.cma库.似乎ocamlbuild首先尝试确定依赖关系然后忽略标记-L/path/to/lib.cma.随着make我只是路过所有必需的目录与-I-L标志来ocamlc,但这些似乎并没有一起工作ocamlbuild- ocamlc不断失败,因为它无法找到必要的库.

ocaml makefile ocamlbuild

4
推荐指数
1
解决办法
1759
查看次数

使用ocamlbuild在.mly文件中使用电池

我有一个包含OCaml .ml文件和Menhir .mly文件的项目.我使用ocamlbuild来编译项目.

我的_tags文件包含这一行:

true: use_menhir, package(batteries)
Run Code Online (Sandbox Code Playgroud)

一切都很好,除非我想在.mly文件中使用电池.如果我open Batteries ;;之间%{%}呼吁ocamlbuild时:在我.mly文件,我得到"未绑定模块电池错误".

似乎当ocamlbuild调用menhir时,就像这样:

/usr/bin/menhir --ocamlc '/usr/bin/ocamlfind ocamlc' --infer parser.mly
Run Code Online (Sandbox Code Playgroud)

它会忘记-package batteries--ocamlcmenhir选项中添加(或等效的东西).

我该如何解决这个问题?也许我的_tags文件中的.mly文件的特殊规则可以帮助吗?或者它是一个ocamlbuild错误?

ocaml ocamlbuild ocaml-batteries menhir

4
推荐指数
2
解决办法
581
查看次数

使用ocamlbuild构建C++代码

我找到了许多关于如何.o使用C源构建文件的指南ocamlbuild.但是,这些不适用于C++文件,它们ocamlbuild无法开箱即用.

我试图写一个myocamlbuild.ml提供从规则文件(请求后如下图所示).cpp,以.o和失败,ocamlc抱怨不知道该怎么做一个.cpp文件(即使当编译器设置为g++通过命令行标志).

open Ocamlbuild_plugin ;;

let ext_obj = !Options.ext_obj;;
let x_o = "%"-.-ext_obj;;

rule "ocaml C++ stubs: cpp -> o"
  ~prod:x_o
  ~dep:"%.cpp"
  begin fun env _build ->
    let c = env "%.cpp" in
    let o = env x_o in
    let comp = 
      if Tags.mem "native" (tags_of_pathname c) then !Options.ocamlopt else !Options.ocamlc in
    let cc = 
      Cmd(S[comp; T(tags_of_pathname c++"c"++"compile"); A"-custom"; A"-cc"; A"g++"; A"-c"; …
Run Code Online (Sandbox Code Playgroud)

c++ ocaml ocamlbuild

4
推荐指数
1
解决办法
563
查看次数

Oasis构建配置与子目录

我正在使用oasis来构建我的ocaml项目,源代码存在于一个名为src的目录中.绿洲构建文件看起来像这样:

OASISFormat: 0.4
Name:        Test
Version:     0.1
Synopsis:    no
Authors:     Me
License:     BSD-3-clause
Plugins:     META (0.4)

Executable abc
  Path:        src
  BuildTools:  ocamlbuild
  MainIs:      main.ml
Run Code Online (Sandbox Code Playgroud)

现在我想将文件组织到子文件夹中,将a.mli和a.ml放入src/util中.执行此操作后,模块对ocamlbuild/ocamlc不可见,从而导致"未绑定的模块A"错误.如果我手动调用ocamlc,我可以添加-I src/util标志以使a.mli再次可见.

如何在不使文件完整库的情况下向绿洲配置添加其他路径?

ocaml ocamlbuild

4
推荐指数
1
解决办法
320
查看次数

绿洲捡起了错误的ocamlbuild

我尝试使用Opam提供的Ocaml版本编译Ocaml项目.我的ocamlbuild,ocamlfind和绿洲似乎没问题:

/Users/fred/.opam/4.02.1/bin/ocamlbuild
dhcp-182-73:compil fred$ which ocamlfind
/Users/fred/.opam/4.02.1/bin/ocamlfind
dhcp-182-73:compil fred$ which oasis
/Users/fred/.opam/4.02.1/bin/oasis
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时,似乎调用了错误的ocamlbuild版本,甚至ocamlfind的版本也是正确的,我认为它解释了为什么ocamlfind无法找到sexplib库.

$ make
ocaml setup.ml -build 
Finished, 0 targets (0 cached) in 00:00:00.
+ /Users/fred/.opam/system/bin/ocamlfind ocamldep -package threads -package sexplib.syntax -package core -package comparelib.syntax -modules  src/tricot/tricot.mli > src/tricot/tricot.mli.depends
ocamlfind: Package `sexplib.syntax' not found
Command exited with code 2.
Compilation unsuccessful after building 1 target (0 cached) in 00:00:00.
E: Failure("Command ''/usr/local/bin/ocamlbuild' src/tricot/tricot.cma src/tricot/tricot.cmxa src/tricot/tricot.a src/tricot/tricot.cmxs src/compil/compil.cma src/compil/compil.cmxa src/compil/compil.a src/compil/compil.cmxs src/main.native -use-ocamlfind -tag debug' terminated with error code 10") …
Run Code Online (Sandbox Code Playgroud)

ocaml ocamlbuild ocamlfind oasis

4
推荐指数
1
解决办法
554
查看次数

使用ocamlbuild将选项传递给camlp4

我正在使用ocamlbuild对ocamlfind的本机支持来简化我的项目的构建过程.文件foo.ml依赖于使用camlp4宏的条件编译.该_tags文件包含以下内容:

<foo.ml>: package(camlp4.macro), syntax(camlp4o)
Run Code Online (Sandbox Code Playgroud)

这很好用,但我无法将选项传递给camlp4.不使用ocamlbuild + ocamlfind自动化,命令行将是这样的:

camlp4o pa_macro.cmo -DFOO file.ml
Run Code Online (Sandbox Code Playgroud)

但是-DFOO在使用ocamlbuild + ocamlfind时如何将变量传递给camlp4?我觉得应该有一个简单的命令行选项,而不是乱七八糟myocamlbuild.ml.

ocaml ocamlbuild ocamlfind camlp4

3
推荐指数
1
解决办法
470
查看次数

使用Ocamlbuild使用配置文件信息构建本机可执行文件

如何使用Ocamlbuild构建启用的配置文件信息?它似乎-p不起作用.

现在,我用ocamlopt它.例如,

$ ocamlfind ocamlopt -c -p -thread -package core test.ml
$ ocamlfind ocamlopt -p -o test -thread -package core -linkpkg test.cmx
Run Code Online (Sandbox Code Playgroud)

怎么做同样的

ocamlbuild -user-ocamlfind test.native
Run Code Online (Sandbox Code Playgroud)

ocaml ocamlbuild ocamlfind

3
推荐指数
1
解决办法
627
查看次数

OCaml中Array.create的奇怪之处

我是OCaml的新手.当我在Ocaml中使用数组进行编码时,我遇到了一个我无法理解的问题.
这是代码:

let a = Array.create 5 (Array.create 5 0);
a.(0).(1) <- 1
Run Code Online (Sandbox Code Playgroud)

我只想将1分配给[0] [1]但事情发生了:第一个colummn中的所有元素都已分配.也就是说,代码后[0] [1],[1] [1],[2] [1],[3] [1]和[4] [1]都等于1以上执行.
如果我使用以下方法创建数组:

Array.make_matrix 5 5 0
Run Code Online (Sandbox Code Playgroud)

一切都好.

我的环境:

Ubuntu 13.10
Ocaml 4.01.0
open Core.Std 
Run Code Online (Sandbox Code Playgroud)

ocaml ocamlbuild

3
推荐指数
1
解决办法
546
查看次数

标签 统计

ocaml ×10

ocamlbuild ×10

ocamlfind ×3

c++ ×1

camlp4 ×1

makefile ×1

menhir ×1

oasis ×1

ocaml-batteries ×1