2010-03-03 4 views
2

reorganized my project for ocamlbuild with subdirectories을 성공적으로 사용하고 ocamlfind를 사용하여 최상위 수준을 구축하기가 어려웠습니다.ocamlbuild; 건물 최상위 수준

나는 포함하고 패키지를 _tags에 추가 할 모든 모듈을 포함하는 파일을 만들었지 만 빌드가 작동하지 않습니다. 하나의 모듈로 컴파일 된 C 함수를 찾을 수 없습니다. -classic-display을 켜면 해당 파일 libcside.a이 포함되지 않고 전혀 컴파일되지 않은 것을 볼 수 있습니다! 은 C 파일은 내가 뭔가를 누락

cutil.o 

, libcside.clib에, 마지막에 의해 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 

을 추가하고 최상위 레벨에 대한 빌드를 설정했지만 신뢰할 수있는 리소스를 온라인에서 찾을 수 없습니다. 감사.

답변

3
  • 나는 cutil.ml이 libcside.a의 ocaml면을 설명한다고 가정합니다.
  • Cuttil을 mltop에 넣었습니까? 에 libcside.a 연결되지 않습니다 현재 플러그인 cutil OCaml의 라이브러리와
  • 여기
  • 과 함께 프로젝트 지역 OCaml의 라이브러리를 구축하는 간단한 (그리고 작업) 방법 ( dep 단지를 구축하지 링크 ocamlbuild 지시) C 스텁. myocamlbuild.ml에서 :

    liblinuxnet_stubs.clib에서
    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]; 
    

    :

    C 소스가 너무 결과 객체 파일이 linuxnet.ml에서 하나를 오버라이드 (override)하지 않는 linuxnet_c.c라고 공지 것을
    linuxnet_c.o 
    

    (또는 그 반대의 경우도 마찬가지입니다. 그리고 마지막으로 _tags의 :이 탑 레벨에서 사용할 수이 설정으로

    true: use_linuxnet 
    

    (가 .mltop 원인 linuxnet.cma에 Linuxnet를 넣을 필요가 없습니다 ocaml_lib 생성 use_linuxnet 플래그 (가 링크에 추가되므로주의 용법)).

+0

1. 유틸리티는 입니다. 예. 3. 예, 이렇게했습니다. 감사. 나는 플래그에 "libcside"를 추가했지만 작동하지는 않았다. 나는 ocaml_lib를 놓쳤다. 감사! – nlucaroni