2013-01-17 13 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というコマンドを使用しているソースファイルが1つしかない限り、かなりうまく動作しますが、プロジェクトにいくつかのモジュールを含めることができます。どうやってやるの ?js_of_ocamlでモジュールを使用するには?

他のモジュールは、実際にはocamllexとmenhirによって作成されたレクサーとパーサーです。私はtutorialをjs_of_ocamlでocamllexとmenhirの使用方法について読んだが、js_of_ocamlがインストールされている場所(opamをインストールした場所)とocamlbuildを使用する場所が間違っていると仮定し、自動化を使用せずに手で行う方法を知りたいocamlbuildなどのツール。

答えて

8

+site-lib仮定とOPAMに関しては、それはあなたがチュートリアルの作者に報告しなければならない何かがだ、彼らは。それはまたOPAMのユーザーのために働くことを確認したいと思う)私がしようとすることで解決策を見つけました公式の例の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を見ると、それが呼び出されたすべてのコマンドが完全な引数などで表示されます。これはおそらく、手動で行う方法を簡単に把握するための最も簡単な方法です。

2

それは実験の束を取っていますが、私は最終的にこれらのmakefileのようにocsigen使用をはocamlfindために同じフラグを渡すocamlbuild持ってする方法を考え出しました。 OPAMでインストールされたjs_of_ocamlも使用しています。

私のテストケースでは、main.mlとsquare.mlの2つのファイルで非常に小さなサンプルを作成しました。

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の出力を生成します正方形関数はmain.mlにありました。 ocamlbuildログは、私が期待するもの(ocamldepへの2回の呼び出し、2回のocamlc -c、1回のocamlc -linkpkg)を正確に示しています。

関連する問題