2012-12-12 34 views
3

OCaml的手冊包含在其中庫對象文件是在以下述方式頂層循環(ocaml的交互式解釋)加載的鍛鍊(here)內的庫對象文件:負載|使用|需要ocaml的源文件

#load "dynlink.cma";; 
#load "camlp4o.cma";; 

我想在可編譯源文件中複製後續代碼,並且代碼需要上述庫對象文件。我可以用源代碼文件中的一行代碼加載這些文件,並使用ocamlc進行編譯嗎?我已經嘗試了「#load」,「load」,「#use」,「use」,「#require」,「require」以及所有這些由「#directory」和「directory」進行的操作。我知道你可以包含帶有「include ;;」的模塊,但這也不應該起作用,因爲它們只是庫文件,而不是模塊。我試圖在手冊中找到一種方法來做到這一點,但無濟於事。

我是否需要引用編譯命令中的文件?如果是這樣,我該怎麼做?

回答

1

我假設你的源代碼是使用由camlp4o實現的擴展來編寫的。要編譯源,你可以說:

ocamlc -pp camlp4o -o myfile myfile.ml 

我認爲是需要的#load命令的複雜性,只有當你想使用擴展的頂層(解釋)。

2

以#字符開頭的指令僅用於頂層,並非嚴格意義上的OCaml語言的一部分。在你想編譯的文件中,你不使用#指令。參見OCaml手冊Chapter 9。 #load指令用於加載庫。編譯文件時,必須告訴編譯器使用該庫(在命令行上,而不是在文件中)。開始時直接學習編譯器命令是很好的,但最終你應該使用ocamlfindoasis,這使編譯變得更容易。