2013-05-16 22 views
4

我是OCaml的新手,我想將一些代碼放到另一個文件中,比如foo.ml,就像在C++或Python中做的一樣。但是這部分代碼本身並不構成模塊。我在主源文件的頭部添加了#use "foo.ml"。但是當我使用ocamlbuild構建我的項目時,它報告I/O error: "foo.ml: No such file or directory"。但顯然foo.ml在當前工作目錄中。如何在OCaml中使用#use指令包含其他源文件?

我想知道是否有人知道如何在OCaml中實現這個目標,並讓我的項目被構建,或者如果OCAML中不是這樣的約定呢?任何建議都是值得歡迎的。

回答

12

#use "foo.ml"是交互式頂層的指令,它不適用於編譯器。

如果你想在不同的文件中分割你的代碼(這是一個好主意,並強烈推薦在OCaml中),那麼你應該使用模塊系統。 你爲什麼說你的代碼沒有形成模塊?如果你的代碼只包含一次性函數,它們應該和使用它們的函數在同一個文件中。如果你的代碼是可重用的,那麼它就形成一個模塊。

+0

感謝和我應採納你的做法。 – tfboy

3

正如Thomash所說,這可能是您的問題的錯誤解決方案。

如果您仍然需要它,您必須使用camlp4或外部工具,如cppo

例如對於pa_macro(隨OCaml的):

test2.ml:

let arg = "Hello World" 

test.ml:

INCLUDE "test2.ml" 
let() = 
    print_endline arg 

編譯:

ocamlfind ocamlc -syntax camlp4o -package camlp4 -ppopt pa_macro.cmo test.ml -o test 
+0

謝謝。對camlp4很感興趣。 – tfboy

相關問題