2016-09-27 30 views
0

我試圖用oasis編譯我的項目,我的項目是這樣安排:OCaml的:使用綠洲多層次的src文件夾

_oasis 
src/ 
    main.ml 
    core_a.ml 
    core_b.ml 
    type.ml 
    plugins/ 
     plugin_a.ml 
     plugin_b.ml 

注意,在plugin_a.ml,它指的是模塊type.ml(即,open Type)。

當我使用oasis編譯項目,它報告:

Unbound module Type 

這裏是我的_oasis文件的簡化版本:

.... 
BuildTools: ocamlbuild 
BuildDepends: deriving, deriving.syntax, core, batteries 

Executable "main" 
    Path:   src 
    MainIs:   main.ml 
    CompiledObject: best 
    Install:  false 
    BuildDepends: deriving, deriving.syntax, core, batteries 

難道我做錯了什麼嗎?或者我正在做的不是組織這樣一個項目的最佳做法?

回答

1

我認爲你的項目結構有點奇怪。你有一個插件的子目錄,但你應該注意到沒有命名空間或包層次結構,所以這在實踐中並不是很有用。

至於這是否可能,答案似乎是混合

  • 它不可能只是綠洲這樣做,因爲它不會讓你的Path選項指定多個值。

  • 它應該很容易與ocamlbuild完成,但通過用include(但我不建議這麼做)標記需要的所有內容。

隨着您的oasis項目的發展,您應該考慮定義綠洲中的庫部分並使用它們來組織項目之間的依賴關係。例如,在這種情況下,您可以創建一個包含plugin_a和plugin_b的「插件」庫。但是如果沒有在這裏進行一些規劃,您將很快陷入循環依賴。