2013-04-24 68 views
4

我正在學習更復雜的編輯OCaml如何在OCaml中很好地管理編譯?

第一我還沒有被C程序員,我真的不知道什麼是make等我使用Mac OS X terminal,我也是一個Java程序員。

我發現OCaml中,有一些東西像ocamlcocamlbuildocamlfindoasis,等我非常被他們迷惑。


問題1

誰能告訴我,我應該之中ocamlcocamlbuildocamlfindoasis使用哪一個?


問題2

我想這個教程http://nicolaspouillard.fr/ocamlbuild/ocamlbuild-user-guide.html,這是很好的ocamlbuild

但是如果我想使用外部庫如ocaml-batteriescamomile,如何使用ocamlbuild連接這些庫?


問題3

這是關於所有的外部庫一個更實際的問題。

因此,對於許多ocaml庫,我使用opam install來安裝它們。

  1. 爲什麼需要安裝一個圖書館嗎?我的意思是,在Java中,通常我們只是將lib複製到某處,然後將lib的路徑包含到-classpath-cp中。那麼爲什麼我們需要安裝OCaml庫?

  2. opam install之後的一個lib,比如camomile(對於utf8),發生了什麼,會發生什麼?這種安裝只是下載一個lib的源文件並將其複製到某個地方?

  3. 怎麼樣才能找到這個庫呢?例如,如果我opam install camomile,那麼我如何鏈接或使用他們在我自己的代碼?

  4. 通常如何使用ocaml library?例如,對於camomilehttp://camomile.sourceforge.net/dochtml/index.html),它們有三個模塊:CamomileLibrary等。所以我應該在我的代碼中使用open模塊,對不對?

回答

2

工具:

  • ocamlc:OCaml中,以字節碼編譯
  • ocamlopt:OCaml的本地代碼編譯器
  • ocamlfind:圍繞ocamlc和ocamlopt包裝編譯各種OCaml的包/鏈接,即使用「ocamlfind ocamlopt -package camomile -c yourfile.ml」來編譯yourfile.ml, ,並使用'ocamlfind ocamlopt -package camomile yourfile.cmx -linkpkg -o yourfile'來創建一個可執行文件
  • 綠洲:構建系統生成的autoconf一樣的automake &爲C/C++,但更簡單的

隨着近來ocamlbuild你可以使用 'ocamlbuild -use-ocamlfind -pkg -pkg ......' 作爲快捷方式使用ocamlfind軟件包package1,package2構建您的項目。 下一步是使用'ocamlbuild -use-ocamlfind'並將package()指令放在_tags文件中。

但是,我會建議嘗試綠洲,它簡化了爲您的項目創建一個構建系統。 如果你想看看使用oasis或ocamlbuild時會發生什麼「引擎蓋下」,請參閱_build/_log文件。它包含所有的ocamlfind/ocamlc/ocamldep/ocamlopt調用。

opam問題可能屬於一個單獨的問題。

+0

感謝您的回答。我只想對整個過程有一個清晰的描述,目前我的腦海裏一片混亂。 _tags應該在哪裏? – 2013-04-24 16:03:50

+0

在項目的根目錄中,即運行ocamlbuild的地方。 Ocamlbuild會查找當前目錄中的某些文件,如果它發現它們,它們將用於配置它的構建方式。 '_tags'用於定義編譯某些文件時要定義的標記(即包含在搜索路徑中的內容,警告標誌,調試標誌,鏈接的包等)。 'myocamlbuild.ml'用於定義OCaml中的其他構建規則(OASIS將爲您生成一個相當複雜的作爲起點)。 – 2013-04-24 16:11:29