Ocamlbuild不会考虑包含的文件夹

时间:2015-06-08 19:42:40

标签: ocaml ocamlbuild

我正在尝试使用ocamlbuild来构建我的项目。它需要考虑一个外部库(也使用ocamlbuild编译),该库包含在文件夹myfolder/中的以下文件(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命令没有被赋予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;

提前谢谢你,

TobiasBora。

1 个答案:

答案 0 :(得分:1)

我猜ocamlbuild不会跟随"外部" (在项目树之外)链接。 也许硬链接可以工作,但更好的是将库安装为普通的ocamlfind包。