代码之家  ›  专栏  ›  技术社区  ›  nlucaroni

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

  •  10
  • nlucaroni  · 技术社区  · 14 年前

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

    通过使用一些基本规则(调用 ocaml_lib parser.mlpack parser.mli 在其实现的根目录中,并修改 _tags

    在编译过程中,正确地遍历解析器目录,并且 parser.cmi parser.mli.depends 都是在 _build 目录以及所有 *.cm[xio]

    我觉得我可能在做一些多余的事情,但不管怎样,这个项目 仍然 编译时找不到解析器模块!

    谢谢

    _标签

    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
    

    /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.  
    

    你会注意到的 -I parser 不包括在上述链接阶段中;实际上,没有包含任何与解析器相关的文件!

    编辑:

    2 回复  |  直到 14 年前
        1
  •  3
  •   Michael Ekstrand    14 年前

    我想知道 parser.mli parser.cmi 将在以下情况下从打包操作生成 parser.mlpack 文件已删除。如果这是可行的,那么这可以被重新处理成一个真正的答案。

    而且,你不需要 parser/ 作为中模块的前缀 parser.mlpack parser.mlpack parser 目录,你有 include

    更新 :这解决了问题,但不是根本原因。根据下面的评论,根本原因是 .mlpack 已经搬迁。

        2
  •  4
  •   Michael Ekstrand    14 年前

    _tags :

    "parser": include
    

    然后 ocamlbuild