Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 正确编译子文件夹中的模块(ocamlbuild)_Compilation_Ocaml_Ocamlbuild - Fatal编程技术网

Compilation 正确编译子文件夹中的模块(ocamlbuild)

Compilation 正确编译子文件夹中的模块(ocamlbuild),compilation,ocaml,ocamlbuild,Compilation,Ocaml,Ocamlbuild,我最近决定在我的项目目录中组织文件。我将几个不同文件类型的解析器移到了它们自己的目录中,并决定使用ocamlbuild(随着项目变得越来越复杂,简单的shell脚本不再足够) 通过使用一些基本规则(调用ocaml_lib,我将在其他时间使用ocamlfind)修改myocamlbuild,我能够成功地包含外部项目,但我仍然无法正确地将文件夹作为模块包含到项目中。我创建了一个parser.mlpack文件,并用要包含的适当模块(例如,“parser/Date”,等等)填充它,在目录的根目录中为它们

我最近决定在我的项目目录中组织文件。我将几个不同文件类型的解析器移到了它们自己的目录中,并决定使用ocamlbuild(随着项目变得越来越复杂,简单的shell脚本不再足够)

通过使用一些基本规则(调用
ocaml_lib
,我将在其他时间使用ocamlfind)修改myocamlbuild,我能够成功地包含外部项目,但我仍然无法正确地将文件夹作为模块包含到项目中。我创建了一个
parser.mlpack
文件,并用要包含的适当模块(例如,“parser/Date”,等等)填充它,在目录的根目录中为它们的实现编写了一个
parser.mli
,并修改了
\u标记
文件(见下文)

在编译过程中,正确地遍历解析器目录,并且在
\u build
目录中创建了
parser.cmi
parser.mli.depends
;以及解析器子目录中的所有
*.cm[xio]
文件

我觉得我可能在做一些多余的事情,但无论如何,当我编译时,项目仍然找不到解析器模块

谢谢

\u标签

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
您会注意到,
-I解析器
不包括在上面的链接阶段中;实际上,没有包含任何与解析器相关的文件

编辑:从下面的注释和答案中添加新的详细信息。

您需要在搜索路径中“包括”解析器目录。您可以在标签中执行此操作:

"parser": include

然后,
ocamlbuild
可以在解析器目录中搜索感兴趣的文件。

我想知道
parser.mli
是否以某种方式干扰了处理mlpack文件时的依赖关系<处理和编译
parser.mlpack
时,将从pack操作生成code>parser.cmi。尝试在删除
parser.mli
文件的情况下构建。如果这是可行的,那么这可以被重新处理成一个真正的答案

另外,如果
parser.mlpack
位于
parser
目录中,并且您有
include
标记集,则不需要将
parser/
作为
parser.mlpack
中模块的前缀。但这不应该对这件事产生影响


更新:这解决了问题,但不是根本原因。根据下面的评论,根本原因是
.mlpack
中提到的一个已重新定位的文件。

。。。我修改了上面的问题。这很有帮助,但实际上我已经这样做了,但是从命令行与
-I parser
的等价性来看。现在,我只是使用
ocamlbuild项目进行构建。
那么让我们试试其他方法:)。作为一个单独的答案完成,因为它实际上是另一种方法。(为了完整起见,您可能已经知道这一点)或“解析器”将起作用,但“解析器”是正确的,因为我不尝试进行任何模式匹配。是的,这起作用,但没有预期的后果。未创建表示目录内容的模块;子模块直接引用它们。编译期间,
-pack
参数被添加到适当的模块中。但不用于最终产品。我对-pack的解释是否不正确?
-pack
应该创建一个模块,其中包含作为子模块的其他模块。然后,您的其他代码必须将它们作为子模块引用(例如,
Parser.ConfParser
);如果它曾经直接引用它们(只是
ConfParser
而不首先
open
ing
Parser
),那么事情就会变得一团糟。当您没有parser.mli时,您可以发布
-verbose
输出吗?我重新添加了parser.mli文件。我认为由于某种原因,在编译包时出现了一个错误,但它并没有在应该发生的地方中断。在我移动的
mlpack
文件中有一个额外的模块。
"parser": include