我正在尝试使用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。
答案 0 :(得分:1)
我猜ocamlbuild
不会跟随"外部" (在项目树之外)链接。
也许硬链接可以工作,但更好的是将库安装为普通的ocamlfind包。