2013-12-12 71 views
0

是否有可能,有OCP-打造,執行下列操作:如何生成和使用生成的文件

  1. 編譯發電機。
  2. 調用生成器生成一個文件。
  3. 用生成的文件編譯項目。

到目前爲止,我嘗試這樣做:

(generator.ocp)

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

(generated.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: in project "error_code", the source filename "src/generated/error_code.ml" does not exist

我看到的版本文件的生成存在一定的支撐,如在項目ocp-indent

線46

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

任何幫助非常感謝,謝謝。

+0

我不認爲在這個時候它是可能的。如果已經支持,我會非常驚訝。我認爲,關於這個項目的更好的地方是它在github上的bug跟蹤器...... – Kakadu

回答

1

在分支「下一步」 github.com/OCamlPro/ocp-build的,你會發現一個版本的OCP-構建的可能解決您的問題:

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" *) 
+0

很高興知道這樣的功能可用,但是我不能使用這個版本,所以我將使用Makefile在ocp-build之上。 –