2013-07-08 2 views
4

최종적으로 단일 릴리스로 통합 될 일련의 관련 응용 프로그램을 개발 중입니다. 여러 응용 프로그램이 동일한 레코드 구조를 공유합니다.Erlang : 여러 응용 프로그램의 * .hrl 파일 위치

해야하는 I :

가) 각 응용 프로그램의 포함 디렉토리에있는 레코드 구조를 정의하는 * .hrl 파일을 중복? b) 내 응용 프로그램 트리에 다른 파일 하나를 놓으십시오 --- 그렇다면 어디에서?

여기에 내 현재 트리입니다 : 내가 시도 방법은 아무것도하지 않는 응용 프로그램을 만드는 것이었다

답변

4

zpt$ 
    apps 
     app1 
      ebin 
      include 
      myrecords.hrl 
      priv 
      src 
     app2 
      ebin 
      include 
      myrecords.hrl 
      priv 
      src 
     etc 

많은 감사,

LRP하지만, 일반적인 레코드 정의를 포함 여러 프로젝트에. 그런 다음 철근을 종속성으로 포함하기 위해 사용했습니다. hrl 파일을 포함 할 때는 include_lib 구문을 사용합니다. 이 구문을 사용하면 다른 응용 프로그램의 hrl 파일을 포함 할 수 있습니다.

  1. 그것은 철근 종속 시스템
  2. 멋지게 재생 : some_src.erl 또는 other_src.erl 중 하나에 게재 될 수 있습니다

    app 
        ebin 
        include 
        priv 
        src 
         some_src.erl 
        deps 
         common_hrl_app 
          include 
           common_records.hrl 
          src 
          ebin 
         other_dep_app 
          src 
           other_src.erl 
          . 
          . 
          . 
    

    include_lib 예 : 때문에

    -include_lib("common_hrl_app/include/common_records.hrl"). 
    

    나는이 방법을 좋아한다

  3. 버전 관리에서 한 곳에서 hrls를 추적 할 수 있습니다.
  4. 새 응용 프로그램이 동일한 레코드를 사용하는 다른 응용 프로그램과 호환되도록하려면이 응용 프로그램을 버전 화하여 특정 버전을 가져올 수 있습니다. 코멘트에서

응답 질문 :

나는 철근 버전을 확인할 수 있도록 응용 프로그램의 이름과 버전을 지정하는 EBIN 디렉토리에 해골 응용 프로그램 파일이 있습니다. 여기에 예를 들어 철근으로

{application,common_hrl_app, 
     [{description,[]}, 
      {vsn,"1"}, 
      {registered,[]}, 
      {applications,[kernel,stdlib]}, 
      {env,[]}, 
      {modules,[]}]}. 

, 당신은 의존성 등의 여러 응용 프로그램을 가질 수있는 최고 수준의 응용 프로그램을 가지고있다. 보강 철근이 이러한 종속성을 가져 오면 deps 디렉토리에 배치합니다. 이러한 응용 프로그램 중 하나에 자체 종속성이있는 경우 해당 응용 프로그램도 deps 디렉토리로 가져 오는 식으로 진행됩니다. deps 디렉토리의 무한대로 중첩 된 계층 구조는 없습니다.

+0

멋진 솔루션처럼 보입니다. 하지만 난 두 가지에 대해 잘 모르겠다. 아마 Rebar와 약간 불안정하기 때문일 것이다. 1) common_hrl_app에 include 디렉토리를 제외하고 모두 비어 있나? 2) deps 하위 트리가 내 트리의 다른 모든 응용 프로그램에 포함됩니까? –

+0

답변에 대한 설명이 추가되었습니다. – kjw0188

관련 문제