2010-03-03 56 views
2

成功reorganized my project for ocamlbuild with subdirectories並使用ocamlfind後,我發現很難構建頂層。ocamlbuild;建立頂層

我已經構建了一個.mltop文件,其中包含將包含的所有模塊並將其添加到_tags,但構建不起作用。它找不到使用其中一個模塊編譯的C函數。與-classic-display上,我可以看到該文件,libcside.a,沒有被列入,甚至沒有被編譯! C文件添加爲myocamlbuild.ml由依賴,

flag ["link"; "ocaml"; "use_cutil"] (S [A"-cclib"; A"-L."; ]); 
dep ["link"; "ocaml"; "use_cutil"] ["libcside.a"]; 

_tags

<utilities.*> : use_cutil 
<**/*.top> : use_str, use_unix, use_cutil, use_curl, use_mysql 

,最後,在libcside.clib

cutil.o 

我失去了一些東西在建立頂級的構建,但我無法在網上找到可靠的資源。謝謝。

回答

3
  • 我認爲cutil.ml描述了libcs​​ide.a的ocaml端 - 正確嗎?
  • 您是否將Cutil放入了mltop?
  • 根據您當前的插件cutil ocaml的圖書館將無法鏈接libcs​​ide.a(dep僅指示ocamlbuild打造它,而不是鏈接)
  • 這是建立項目本地ocaml的圖書館有一個簡單的(工作)的方式C樁。在myocamlbuild.ml:

    ocaml_lib "linuxnet"; 
    let liblinuxnet_stubs = "liblinuxnet_stubs."^!Options.ext_lib in 
    flag ["link"; "ocaml"; "use_linuxnet"] (S[A"-cclib"; A liblinuxnet_stubs;]); 
    dep ["link"; "ocaml"; "use_linuxnet"] [liblinuxnet_stubs]; 
    

    在liblinuxnet_stubs.clib:

    linuxnet_c.o 
    

    注意,C源被稱爲linuxnet_c.c,使得生成的目標文件不覆蓋從linuxnet.ml所述一個(或反之亦然)。終於在_tags:

    ​​

    在此設置下它會在頂層使用(注意,沒有必要把Linuxnet到.mltop原因linuxnet.cma將加入由use_linuxnet標記(ocaml_lib生成的鏈接用法))。

+0

1.公用事業確實 2.是的。 3.是的,這是做到了。謝謝。我曾經在旗幟上添加了A「libcs​​ide」,但它沒有奏效。我錯過了ocaml_lib。謝謝! – nlucaroni 2010-03-04 13:21:44