0

是否可以使用 ocp-build 执行以下操作:

  1. 编译生成器。
  2. 调用生成器生成文件。
  3. 使用生成的文件编译项目。

到目前为止,我试过这个:

(生成器.ocp)

begin library "error_gen"
    sort = true
    files = [ "error_gen.ml" ]
    requires = [str]
end

(生成的.ocp)

begin library "error_code"
    sort = true
    files = [
      "error_code.ml" (
        pp = [ "./_obuild/error_gen/error_gen.byte" ]
        pp_requires = [ "error_gen:byte" ]
      )
    ]
    requires = ["error_gen"]
end

(和 main.ocp)

begin program "main"
    sort = true
    files = []
    requires = ["error_code" "parser"]
end

它抱怨此消息:

错误:在项目“error_code”中,源文件名“src/generated/error_code.ml”不存在

我看到版本文件生成存在一些支持,例如在项目ocp-indent中

第 46 行。

"indentVersion.ml" (ocp2ml) (* auto-generated by ocp-build *)

非常感谢任何帮助,谢谢。

4

1 回答 1

1

在 github.com/OCamlPro/ocp-build 的“next”分支中,您会找到一个可以解决您的问题的 ocp-build 版本:

begin library "error_code"
    sort = true
    files = [ "error_code.ml" ]
    build_rules = [
      "error_code.ml" (
        (* the files that are needed to call the command *)
        sources = [ "%{error_gen_FULL_DST_DIR}%/error_gen.byte" ]
        (* the commands to be executed, in the sub-directory of the library
           each command has the syntax:    { "COMMAND" "ARG1" "ARG2" ... }
        *)
        commands = [ 
           {   "%{error_gen_FULL_DST_DIR}%/error_gen.byte"   } 
        ]
      )
    ]
    requires = ["error_gen"]
end

例如,这是在 wxOCaml 中使用的:

https://github.com/OCamlPro/ocplib-wxOCaml/blob/next-ocpbuild/configure.ocp

命令可以使用选项进行后置:

{ "configure" } (chdir = "subdirectory")  (* to execute in a sub-directory *)
{ "cat" "toto" } (stdout = "new_toto")    (* to copy the stdout in "new_toto" *)
于 2013-12-13T13:22:55.960 回答