我最近決定組織我的項目目錄中的文件。我把我有幾種不同文件類型的解析器移動到他們自己的目錄中,並決定使用ocamlbuild(隨着項目變得越來越複雜,簡單的shell腳本不再足夠)。正確編譯子文件夾中的模塊(ocamlbuild)
我能夠成功地通過修改myocamlbuild包含一些基本規則(調用ocaml_lib
,我將在其他時間使用ocamlfind)來成功包含外部項目,但我堅持如何將該文件夾作爲模塊包含到項目中。我創建了一個parser.mlpack
文件,並在其中填充了要包含的正確模塊(例如「解析器/日期」等),在目錄的根目錄中爲其實現編寫了parser.mli
,並修改了文件_tags
(請參見下文) 。
在編譯過程中,解析器目錄被正確遍歷,且parser.cmi
,parser.mli.depends
都在_build
目錄中創建;以及解析器子目錄中的所有*.cm[xio]
文件。
我覺得我可能會做些多餘的事情,但無論如何,項目仍然找不到解析器模塊時,我編譯!
謝謝!
_tags
debug : true
<*.ml> : annot
"parser" : include
<parser/*.cmx>: for-pack(Parser)
<curlIO.*> : use_curl
<mySQL.*> : use_mysql
<**/*.native> or <**/*.byte> : use_str,use_unix,use_curl,use_mysql
編譯錯誤
/usr/local/bin/ocamlopt.opt unix.cmxa str.cmxa -g -I /usr/local/lib/ocaml/site-lib/mysql mysql.cmxa -I /usr/local/lib/ocaml/curl curl.cmxa curlIO.cmx utilities.cmx date.cmx fraction.cmx logger.cmx mySQL.cmx data.cmx project.cmx -o project.native
File "\_none\_", line 1, characters 0-1:
Error: **No implementations provided for the following modules:**
Parser referenced from project.cmx
Command exited with code 2.
你會發現-I parser
不包括在上面的鏈接階段;實際上沒有包含解析器相關的文件!
編輯:在下面的評論和回答中添加新的細節。
是的,這工作,但沒有預期的後果。表示目錄內容的模塊未創建;它們直接由子模塊引用。 '-pack'參數在編譯期間會添加到適當的模塊中。但不用於最終產品。我的解釋是關於-pack不正確的嗎? – nlucaroni 2010-02-08 18:06:12
'-pack'應創建一個包含其他模塊作爲子模塊的模塊。您的其他代碼必須將它們稱爲它們的子模塊(例如'Parser.ConfParser');如果它直接引用它們(只要'ConfParser'沒有首先打開'Parser'),那麼事情就會變得混亂。 你能張貼'-verbose'輸出,當你沒有'parser.mli'? – 2010-02-08 18:12:00
我添加了parser.mli文件。我認爲出於某種原因編譯該包時出現錯誤並沒有打破它應該的位置。 **我的'mlpack'文件中有一個額外的模塊,我移動了**。 – nlucaroni 2010-02-08 20:46:57