nlu*_*oni 10 ocaml compilation ocamlbuild
我最近决定在我的项目目录中组织文件.我将我拥有的几种不同文件类型的解析器移动到他们自己的目录中,并决定使用ocamlbuild(因为项目变得越来越复杂,简单的shell脚本不再足够).
我可以用一些基本的规则(修改调用成功myocamlbuild包括外部项目ocaml_lib,我会用ocamlfind其他时间),但我停留在如何将文件夹作为一个模块到项目正常.我创建了一个parser.mlpack文件并填入了要包含的适当模块(例如,"parser/Date"等等),parser.mli在目录的根目录中为它们的实现编写了一个_tags文件,并修改了文件(见下文).
在编译,解析器目录遍历正确的,并且parser.cmi,parser.mli.depends在双双创建_build目录; 以及*.cm[xio]解析器子目录中的所有文件.
我觉得我可能会做一些多余的事情,但无论如何,当我编译时,项目仍然无法找到Parser模块!
谢谢!
_tags
debug : true
<*.ml> : annot
"parser" : include
<parser/*.cmx>: for-pack(Parser)
<curlIO.*> : use_curl
<mySQL.*> : use_mysql
<**/*.native> or <**/*.byte> : use_str,use_unix,use_curl,use_mysql
Run Code Online (Sandbox Code Playgroud)
编译错误
/usr/local/bin/ocamlopt.opt unix.cmxa str.cmxa -g -I /usr/local/lib/ocaml/site-lib/mysql mysql.cmxa -I /usr/local/lib/ocaml/curl curl.cmxa curlIO.cmx utilities.cmx date.cmx fraction.cmx logger.cmx mySQL.cmx data.cmx project.cmx -o project.native
File "\_none\_", line 1, characters 0-1:
Error: **No implementations provided for the following modules:**
Parser referenced from project.cmx
Command exited with code 2.
Run Code Online (Sandbox Code Playgroud)
您会注意到-I parser上面的链接阶段不包括在内; 实际上没有包含任何与解析器相关的文件!
编辑:从评论中添加新的详细信息并在下面回答.
我想知道是否parser.mli会以某种方式干扰处理 mlpack 文件的依赖关系。 将在处理和编译parser.cmi时从 pack 操作生成。parser.mlpack尝试在parser.mli删除文件的情况下进行构建。如果有效,那么可以将其重新处理为真正的答案。
另外,如果is 在目录中并且您已设置标签,则不需要将parser/其作为模块的前缀。但这应该不会有什么不同。parser.mlpackparser.mlpackparserinclude
更新:这解决了问题,但不是根本原因。.mlpack根据下面的评论,根本原因是已重新定位的文件中提到的文件。