2011-05-10 3 views
56

중소 규모의 OCaml 프로젝트를 구축하고 관리하는 데있어 정식으로 선호되는 방법은 생태계에 새로 온 사람들에게 불분명합니다. 나는 ocamlc, & c의 기초를 이해합니다. 그들은 전통적인 UNIX C 컴파일러를 그대로 닮아 있습니다. 그러나 개별 파일을 일회성으로 컴파일하는 것 이상의 수준에서는 컴파일을 간단하고 깔끔하게 관리하는 것이 가장 바람직하지 않습니다. 이 쟁점은 잠재적 인 도구를 찾는 것이 아니라 표준 OCaml 프로젝트를 구조화하고 구축하기 위해 커뮤니티의 경험에 의해 검증 된 하나 또는 몇 가지의 올바른 (충분한) 방법을 보는 것입니다.OCaml 프로젝트를 구조화하고 구축하는 가장 좋은 방법은 무엇입니까?

내 모델 유스 케이스는 순수한 OCaml 또는 OCaml과 C 의존성에 대한 겸손하지만 치명적인 프로젝트는 아닙니다. 이러한 프로젝트는 :

  1. 소스 파일
  2. 가 선택적으로 C 라이브러리와 OCaml의 래퍼를 포함하는 하나 이상의 제 3의 라이브러리에
  3. 링크 표준 라이브러리의 수에
  4. 링크의 수를 포함

여러 다른 도구 (이것은 또한 (3)과 같이 제 3 자 라이브러리를 별도로 관리되고 포함될 수 있지만) 하위 프로젝트에 띄는 :

  • 사용자 정의 Makefile은 대부분의 오픈 소스 OCaml 패키지에서 공통적 인 표준으로 보이지만, 겸손한 C/C++ 프로젝트에 비해 좌절스럽고 복잡합니다. 더욱이 겉으로보기에 단순한 OCaml 라이브러리는 autoconf/automake를 맨 위에 배치하여 훨씬 더 복잡합니다.
  • ocamlbuild은 최소한의 구성으로 빌드를 자동화하기위한 최신의 간소화 된 메커니즘을 제공하는 것처럼 보입니다.하지만 OCaml 에코 시스템의 입문 자료에서 예제로 표현되거나 여러 가지 게시 된 내가 영감을 얻기 위해 탐색 한 OCaml 프로젝트.
  • OASIS은 Cabal과 같은 패키지 관리자 및 라이브러리 구축을 지원하기 위해 다른 빌드 시스템 위에 규칙 및 라이브러리 코드 계층으로 보이는 것 같습니다.

(나는 또한으로 나타나는, OMake을 본 자칭, 또한 OCaml이 포함 공통 언어 표준 규칙 세트를 포함 "make++"및 ocaml-make OCamlMakefile 니 표준 규칙 템플릿을 제공 GNU make의 경우)

OCaml 빌드를 관리하는 가장 좋은 방법은 무엇입니까?

프로젝트 파일은 어떻게 가장 잘 구조화되어 있습니까?

타사 라이브러리 종속성은 어떻게 포함되고 관리됩니까? 시스템 수준에서 설치하는 것이 좋습니까? 아니면 프로젝트에 로컬로 관리하는 표준적이고 직접적인 방법이 있습니까? 나는 프로젝트가 가능한 한 자체적으로 유지되는 모델을 선호한다.

+0

ocamlbuild 링크는 (지금) 깨진와

=> OCaml의-autoconf를 할 수 있습니다. –

+0

링크가 고정되었습니다. – ygrek

답변

21

사용할 수있는 옵션의 철저한 목록이 있지만이 질문에 대한 명확한 답은 없습니다. 개인적으로 ocamlbuild를 사용하는 것이 좋습니다. myocamlbuild.ml 파일은 here으로 시작하는 것이 좋습니다. 다양한 라이브러리에 의존하는 프로젝트를 쉽게 컴파일 할 수 있습니다. C 라이브러리에 바인딩하는 경우를 처리한다고 생각하지 않지만 도움이 될 수있는 wiki에 대한 추가 예제가 있습니다.

ocamlbuild는 아직 다른 빌드 도구이므로 패키지 관리자 작업을 복잡하게하는 사람들이 있습니다. 그러나 사용 편의성과 그것이 공식 배포본에 포함되어 있다는 사실은 점점 더 널리 사용되고 있습니다.

이 모든 것을 건너 뛰고 오아시스를 직접 사용할 수도 있습니다. 매우 새롭고 안정적인 릴리스가 아직 발표되지 않았지만 매우 유용합니다. 자동으로 myocamlbuild.ml이 생성됩니다. 아주 가까운 장래에 갈 길이 멀지 않은 방법 일 것입니다. 또한 오아시스를 사용하면 개발중인 OCaml 용 CPAN 시스템 인 oasis-db의 이점을 즉시 활용할 수 있습니다.

라이브러리 관리에 대한 대답은 ocamlfind입니다. OCaml의 인스턴스가 여러 개 설치되어있는 경우, ocamlfind의 해당 복사본을 호출하면 모든 라이브러리에 대해 체계적으로 ocamlfind를 사용한다고 가정 할 때 라이브러리에 대한 모든 참조가 해당 특정 인스턴스의 참조가됩니다. 나는 현재 godi를 사용하여 OCaml과 라이브러리를 설치한다. 그것은 ocamlfind를 사용하며 OCaml의 여러 인스턴스를 설치하는 데 아무런 문제가 없습니다.

+5

이 답변 이후 거의 3 년이 지났습니다. 나는 새로운 경험을 공유하고 싶다. 'ocamlc','ocamlopt','ocamlmklib'을 통해 ocamlfind를 통해 문서를 먹어 치우는 것이 OCaml 프로젝트를 구현하는 가장 고통스러운 방법이라는 결론에 다다 랐습니다. 나는 나의 발견을 여기에 문서화했다. https://github.com/pacemkr/ocaml-scrypt/blob/master/Makefile'myocamlbuild.ml' 파일은 실제 문제를 해결할 오아시스라고 확신한다. 노력했지만, 실제로 가지고 있지만, 두 도구 모두 근본적인 복잡성을 추상화하는 데 비참하게 실패합니다. –

+2

내 응답이 너무 오래되었다고 생각합니다. 최근에 나는 [OMake] (http://omake.metaprl.org/)를 사용하고 있었지만, 근본적으로 더 나은 결과가 나오기를 기대하며 모든 빌드 도구와 희망에 만족하지 않습니다. –

+2

상황이 개선되면서, 'opam'은 빌드 시스템에 대해별로 신경 쓰지 않습니다. 'ocamlfind'는'ocamlc'와 친구들을 훨씬 쉽게 사용하게 만듭니다. 이 두 사람은 저를 충분히 가깝게 만듭니다. 가장 어려운 부분은 모든 중간 아티팩트 (cm *)와 그들이 어디서 왔는지,'cclib '과 같은 플래그의 간접 참조, 패키지, 커스텀 런타임 빌드 등과 함께 전달되는 방법을 이해하는 것이었다. –

14

개인적으로 나는 ocamlbuild에 +1을 부여했습니다. 기본 규칙은 하나의 명령으로 중소 규모의 프로젝트를 컴파일 할 수 있으며 최소한의 구성만으로 컴파일 할 수 있습니다. 또한 매우 합리적인 규칙을 적용합니다 (빌드 결과가있는 소스를 섞지 않음). 더 큰 프로젝트의 경우 추가 규칙 인 & 플러그인을 사용하여 원하는대로 사용자 정의 할 수 있습니다.내가 일하는 회사에서 우리는 large project (Ocaml + 일부 C + 일부 사전 처리 + ...)을 사용하고 있으며 매력처럼 작동합니다 (Makefile보다 훨씬 적은 두통을줍니다).

매뉴얼의 경우, 사용자 안내서 (author's webpage에서 사용 가능)가 시작하기에 충분해야한다고 생각합니다. 좀 더 펑키 한 것들은 조금 더 파고 갈 필요가 있습니다.

+0

완전히 동의합니다. 나는 너무 많은 문제없이 ocamlfind, 전처리 및 c를 사용하는 대규모 프로젝트에 참여하고 있습니다. – nlucaroni

+1

내 평행 조사에서 가장 매력적이었던 것 같습니다. 일단 내가 그걸로 땅에 떨어졌을 때 나는 다시보고 할 것이다. – jrk

+7

모든 ocamlbuild 팬들에게 : * you *는 문서 작성, 흥미로운 집에서 만든'myocamlbuild.ml' 파일의 스 니펫 (snippet)을 풀어 주거나 ​​코드에 기여할 수 있다는 점을 기억하십시오. 당신은 당신이 원했던 기능들에 대해 먼저 devs에 연락해야한다. 위시리스트에서 쉬운 대상 : ocamldoc을 호출하여 도트 다이어그램 생성 가능). – gasche

10

+1 OMake.

우리는 몇 년 전 우리의 빌드 인프라를 개정하고 다음과 같은 이유로 OMake를 선택 :

  • 우리의 제품은 C, C++, 관리 C++, 루비와 OCaml의 혼합물로 구성된다.
  • Google은 Linux와 Windows를 모두 타겟팅합니다.
  • 우리는 빌드시 데이터베이스와 상호 작용합니다.
  • 우리는 OCaml 3.10을 사용해야했습니다.
  • 우리의 원래 빌드 시스템은 autoconf/automake를 사용했습니다.
  • out-of-source 빌드 *가 필요합니다.

ocamlbuild를 사용하여 수행 할 수 있는지 여부는 솔직히 모르겠지만 테스트하지 않았습니다. 이 도구는 OCaml의 버그 트래커에서 주위에 어떤 활동이 있기 때문에 확실히 사용중입니다. ocamlbuild를 선택했다면 OCaml의 최신 버전을 가지고 있는지 확인하십시오.

* OMake는 out-of-source 빌드를 약간 분명한 방법으로 지원합니다. 또한 소스가 읽기 전용 인 경우 몇 가지 문제가 있습니다. 우리는 OMake의 Windows 버전을 패치하고 다시 빌드해야했습니다.

+3

omake와 ocamlbuild를 비교해보고 싶습니다. 저는 많은 성공을 거둔 오마케를 사용했습니다. ocamlbuild를 시도했을 때 행운이 없었지만 몇 년 전이었습니다. – aneccodeal

3

좋은 질문입니다.나는 말을하는 경향 :

1)는 빠르고 효율적이며, 공식 분포에 의해 주어진 기본 도구 때문에이 컴파일하는 표준 방법이 될 가능성이 을 ocamlbuild. 공식 배포판에 있다는 사실은 좋은 지적입니다. 왜냐하면 시간이 지나면 남을 가능성이 크기 때문입니다. ocamlfind는 ocamlfind가 가능하므로 ocamlfind로 설치 한 패키지를 관리 할 수 ​​있습니다. ocamlfind는 C의 pkg-config와 비슷합니다.

2) 그러나 프로젝트에 충분하지 않습니다. C와의 통합은 ocamlbuild를 기본으로합니다. 그래서 여기에 오아시스를 사용하여 마침내 질문에 대답하도록 조언합니다. 나는 또한 OMake를 시도했지만 그것을 좋아하지 않았다.

3) 그러나 다른 사람이 자신의 컴퓨터에서 프로젝트를 다운로드하고 빌드 할 수 없으면 빌드 스크립트가 제대로 작동하지 않을 수 있습니다. 또한 오아시스는 pkg-config를 처리하지 않습니다. 이러한 이유로 ocaml-autoconf (autotools의 경우 ocaml 매크로)를 사용하는 것이 좋습니다. autotools는 C 라이브러리를 관리하기위한 표준이며 패키지 관리자에게 잘 알려져 있습니다. 또한 ... 크로스 컴파일을 처리 ocamlbuild

관련 문제