2013-01-17 62 views
7

我目前工作的一個網站項目寫在OCaml中,並使用js_of_ocaml編譯爲JavaScript。它工作得很好,只要我使用命令ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -o file.byte file.ml只有一個源文件,但我想在我的項目中包含幾個模塊。我怎樣才能做到這一點 ?如何通過js_of_ocaml使用模塊?

其他模塊實際上是一個詞法分析器和由ocamllex和巨石poduced的分析器。我已閱讀關於如何使用ocamllex與js_of_ocaml巨石一tutorial但它使所安裝js_of_ocaml其中錯誤的假設(我OPAM安裝),它使用ocamlbuild,我想知道如何做手工,而不使用自動化工具,如ocamlbuild。

回答

8

我,試圖找到解決方案瞭解官方示例的makefile。

這裏是我的Makefile:

OBJS=file1.cmo file2.cmo file3.cmo 
NAME=projectname 
OCAMLC=ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o 

$(NAME).byte: $(OBJS) 
     $(OCAMLC) -linkpkg -o [email protected] $(OBJS) 

$(NAME).js: $(NAME).byte 
     js_of_ocaml $< 

%.cmo: %.ml 
     $(OCAMLC) -c $< 
... 
5

ocamlbuild會記錄它執行的操作。一個ocamlbuild通話後,看_build/_log,你會看到,它已經被調用,以飽滿的參數等。這可能是你們自己去如何做手工最簡單的方法的所有命令。

(關於+site-lib假設和OPAM,這是你應該到教程的作者報告說,他們會想確保它也適用於OPAM用戶。)

2

它採取了一堆實驗的,但是我終於想通了如何讓ocamlbuild傳遞相同的標誌,以ocamlfind這些makefile文件作爲ocsigen使用。我也使用與OPAM一起安裝的js_of_ocaml。

對於我的測試情況下,我創建了兩個文件,一個非常小的例子 - main.ml和square.ml。

square.ml:

let square x = x * x 

main.ml:

let() = (Js.Unsafe.coerce Dom_html.window)##square <- Js.wrap_callback Square.square 

命令成功地構建這樣的:

ocamlbuild -use-ocamlfind -pkgs js_of_ocaml,js_of_ocaml.syntax -syntax camlp4o main.byte 

這產生相同的輸出JS到我的初始測試用例square函數在main.ml中。 ocamlbuild日誌顯示了我所期望的(兩次調用ocamldep,兩次調用ocamlc -c,一次調用ocamlc -linkpkg)。