我正在尝试使用 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;
先感谢您,
托拜厄斯博拉。