0

我正在尝试使用 ocamlbuild 来构建我的项目。它需要考虑在文件夹中包含myfolder/以下文件的外部库(也使用 ocamlbuild 编译)(myfolder 是我在文件中创建的好库的符号链接myocamlbuild.ml):

$ ls _build/myfolder/
PhTools.cmi  PhTools.ml          PhTools.mli
PhTools.cmo  PhTools.ml.depends  PhTools.mli.depends

要编译我的库,我运行以下命令:

ocamlbuild -use-ocamlfind -plugin-tags "package(eliom.ocamlbuild),package(containers),package(fileutils)" -Is "myfolder" -mods "myfolder/PhTools.cmo" _server/./TestHelloServices.cmo

当我运行它时,我遇到了错误:

[...]
ocamlfind ocamlc -I '' -I _server -I _type -i -thread -package eliom.server -package eliom.syntax.predef -package eliom.syntax.type -syntax camlp4o _type/TestHelloServices.ml > _type/TestHelloServices.inferred.mli
+ ocamlfind ocamlc -I '' -I _server -I _type -i -thread -package eliom.server -package eliom.syntax.predef -package eliom.syntax.type -syntax camlp4o _type/TestHelloServices.ml > _type/TestHelloServices.inferred.mli
File "TestHelloServices.eliom", line 6, characters 10-17:
Error: Unbound module PhTools
Command exited with code 2.

如您所见,该选项-I myproject尚未赋予 command ocamlfind ocamlc -i ...。您可以注意到,如果我手动添加ocamlfind ocamlc -i -I 'myproject'此步骤有效。我尝试了很多不同的东西来解决我的问题:使用-cflags '-I,myproject' -lflags '-I,myproject',放入_tags

myproject: include

但我总是有这个错误。

我不知道这是否是相关信息,但我使用了 ocsigen myocamlbuild.ml 文件的略微修改版本:

let client_dir = "_client"
let server_dir = "_server"
let type_dir = "_type"
module M = Ocamlbuild_eliom.Make(struct
    let client_dir = client_dir
    let server_dir = server_dir
    let type_dir = type_dir
  end)

open Ocamlbuild_plugin;;

let () =
  dispatch begin function
    | Before_options ->
      M.dispatcher Before_options;
      (* Link root project *)
      (try
         Unix.symlink "../../../../../myfolder/" "_build/myfolder"
       with Unix.Unix_error (Unix.EEXIST, _, _)-> ());
    | hook -> M.dispatcher hook
  end;

先感谢您,

托拜厄斯博拉。

4

1 回答 1

1

我想ocamlbuild不会遵循“外部”(项目树外)链接。也许硬链接会起作用,但最好将库安装为普通的 ocamlfind 包。

于 2015-07-10T23:21:08.180 回答