2012-02-21 4 views
7

C++ (emacs24 + builtin CEDET) 용 EDE 프로젝트를 설정하려고했지만 필자가 원하는 방식을 찾지 못해 절망적으로 시작하고 있습니다. 메이크 파일 생성. 나는 Emacs에 비교적 익숙하다. 내가 뭘하는지 설명하려고합니다 :C++ 용 EDE 프로젝트를 만드는 방법

가 나는 장난감 프로젝트는과 같이 설정 :

main.cpp 
other/ 
    Utils.cpp 
    Utils.h 
    CGrabBuffer.cpp 
    CGrabBuffer.h 

MAIN.CPP는 "다른 /"디렉토리 안에 모두 .H 년대가 포함되어 있습니다. 다음은이 간단한 디렉토리 설정으로 EDE 프로젝트를 설정하는 단계입니다.

  • emacs에서 main.cpp를 열고 M-x ede-new을 실행하십시오. 유형 : Make; 이름 : main-proj.
  • "other"디렉토리의 파일 중 하나를 열고 M-x ede-new; 유형 : Make; 이름 : aux-proj.
  • 지금은 (내가이 경우 세 가지를 믿는다) 대상 생성 할 시간 다음 MAIN.CPP 버퍼에
    • : M-x ede-new-target이; 이름 : main; 유형 : program. 메시지가 나타나면 main.cpp를이 대상에 추가합니다.
    • Utils.cpp 및 Utils.h가있는 Utils와 CGrabBuffer.cpp 및 CGrabBuffer.h가있는 CGrabBuffer에 대해서도 같은 작업을 반복합니다. 여기서 나는 첫 번째 문제를 발견한다. 이 두 목표는 어떤 유형이어야합니까? 나는 그들이 .o 파일을 생성하기를 원한다. 내가 M-x ede-compile-project를 호출하는 경우이 작업이 완료되면
  • , 나는 세 가지 목표에 M-x ede-customize-current-target를 입력하고 좀 등 경로, 일부 라이브러리,이 후
  • 을 포함 추가, 그것은 컴파일되지 않는 이유는
    • 먼저 main.cpp를 컴파일하려고 시도합니다. Utils.o와 CGrabBuffer.o가 main.cpp를 빌드하기 전에 필요하다는 것을 (EDE를 사용하여) 어떻게 지정해야하는지 모르겠습니다.
    • 수동으로 순서를 변경 (Makefile 편집)하면 utils.o 및 CGrabBuffer.o를 찾을 수 없어 main.cpp를 연결할 수 없습니다. 당신이 볼 수 있듯이

, 나는 큰 혼란의 한가운데에입니다. 어쩌면 EDE에서 "목표"가 무엇을 의미하는지 이해하지 못할 수도 있습니다. 또한 .emacs 파일 내에서 지정해야하는 ede-cpp-root-project의 존재에 대해서도 읽었습니다. 나는 그것이 그것을 의미한다고 생각하기 때문에 그것을 시도하지 않았다. 그것은 Makefile을 생성하지 않습니다, 그렇죠? Project.el과 EDE-cpp-root-project를 사용하여 동일한 의미로 EDE 프로젝트를 만들 수 있습니까? 아니면 과다한가?

죄송합니다. 많은 것들을 잘못 이해하지만 매우 혼란스럽고 이맥스에 익숙하지 않으면 상황이 더욱 악화됩니다. 양해 해 주셔서 감사합니다.

편집 : 일부 수정 및 응답을 통해 나는 많은 것들을 알아낼 수있었습니다. 감사합니다. 여전히 이해할 수없는 것은 edem-cpp-root-project를 .emacs 파일 내에서 사용해야한다는 것입니다. 그것은 단지 C++ 의미론을위한 것입니까? Project.el의 프로젝트와 .emacs의 elisp 라인을 함께 사용하는 것은 불필요한가요?

+1

저는 CEDET를 사용하고 있지만 내 인생에 대한 프로젝트 지원을 이해할 수 없습니다. 난 그냥 외부 메이크 파일을 사용하여 그 위에 "simple"프로젝트 유형을 추가합니다. –

+0

그래, 그게 내가이 물건들을 더 쉽게 관리 할 수있게 해주는 이클립스 같은 다른 IDE들에 집착하게 만드는 유일한 방법이야. – pparescasellas

+0

큰 질문. 나는 지난 며칠 동안 이런 종류의 일을하기 위해 노력했지만, 어딘가에 있다고 생각할 때 모든 것이 무너집니다. EDE가 제대로 문서화되지 않았다는 말은 삼가 서 말입니다. – Mike

답변

7

EDE는 많은 다른 종류의 프로젝트를 처리하도록 설계되었습니다. 일반적으로 빌드 시스템은 다른 도구에서 Emacs 외부에서 작성된 유형입니다.

Makefile을 만드는 EDE 프로젝트 유형은 꽤 많은 일을 할 수 있지만 실제로 유용하게 사용할 수있는 빌드 시스템에 대한 기본적인 지식이 있어야하며, 실제로 프로젝트를 사용자 정의해야합니다. 어떤 복잡한 작업.

최근 Automake 파일을 자동 생성하는 기본 프로젝트 설정을 돕기 위해 EDE 매뉴얼에 섹션을 추가했습니다. 여기 자습서를 확인하실 수 있습니다 :

http://www.randomsample.de/cedetdocs/ede/ede/Quick-Start.html

같은 단계를 그냥 때문에 여분의 복잡성을 대신합니다 사용하지만, 종종 공유 라이브러리에 문제가 기반 프로젝트를 확인 프로젝트에 적용됩니다.

마이크의 대답은 아주 좋지만, .h 파일을 .cpp 소스와 동일한 대상에 추가하는 것이 좋습니다. 별도로 추적 할 것입니다.

또 다른 유용한 트릭은 큰 프로젝트를 변경할 때마다 대문자 C를 사용하는 전체 프로젝트 컴파일 키 스트로크 (C-C, C)를 사용하는 것입니다. 그러면 Makefile을 다시 생성하고 필요한 모든 Automake 기능을 다시 실행 한 다음 맨 위에서 시작합니다.

EDIT : 주어진 프로젝트 영역에 대해 하나의 EDE 프로젝트 만 필요합니다. ede-cpp-root 프로젝트는 다른 자동 프로젝트 유형이 작동하지 않을 때 유용합니다. 그것은 semantic의 스마트 완료 (smart completion)와 태그 룩업 (tag lookup)과 같은 프로젝트 정의를 필요로하는 다른 툴들이 작동 할 수 있도록 .emacs 파일에 생성합니다.

+1

그 튜토리얼은 몇 주 전에 제가 EDE를 처음 보았을 때 찾고 있었지만 비슷한 것을 찾을 수 없었습니다. 매우 도움이되고 새로운 사용자가 정보를 좋아할 것입니다. 감사합니다. :) – pparescasellas

+0

Eric,이 튜토리얼에서 빠진 내용은 실제로'ede-cpp-root-project' 유형을 사용하는 방법에 대한 설명입니다. 매뉴얼의 해당 부분에 도달하면 eieio 서브 클래스와 같은 사용자 중심이 아닌 것들을 보게 될 것입니다. 예를 들어 프로젝트 파일을 설정합니까? 프로젝트 유형을 실제로 어떻게 설정합니까? –

+1

링크가 끊어졌으며 http://www.randomsample.de/cedetdocs/ede/Quick-Start.html로 업데이트해야합니다. 편집을 시도했지만 6 자 이상이 될 필요가있는 편집에 대한 바보 같은 규칙이 있습니다. – nispio

3

글쎄, 나는 실제로이 시간을 알아 냈다고 생각하지만,보기 흉하다.Utils.cppCGrabBuffer.cpp은 적절한 대상 유형이 아닌 것으로 보이기 때문에 자체 대상을 얻지 않아야합니다. 대신, 아카이브 또는 라이브러리를 만들어야 자동으로 Utils.cppCGrabBuffer.cpp이 자동으로 컴파일됩니다. 아래에서는 정적 인 것을 원한다고 가정하겠습니다. 그러나 쉽게 변경할 수 있습니다.

[아카이브 또는 라이브러리가 익숙하지 않은 사용자는 기본적으로 .o 개 파일을 별도의 단위로 수집합니다. 실제로 컴파일을 어렵게하지는 않습니다. here을 읽으십시오.]

1) 위의 처음 두 단계와 반 단계를 수행하십시오 (main 대상을 포함하되 다른 대상은 포함하지 않음).

2) Utils.cpp로 전환하여 M-x ede-new-target; 이름 : aux; 유형 : archive. 메시지가 나타나면이 대상에 Utils.cpp를 추가하십시오.

3) CGrabBuffer.cpp로 전환하고 C-c . a; 목표 : aux.

4) M-x ede-proj-regenerate으로 Makefile을 재생성하십시오. 이 시점에서 을 other 하위 디렉토리에서 실행하면 libaux.a 아카이브를 가져와야합니다.

5) main.cpp로 다시 전환하고 M-x ede-customize-current-target을 수행하십시오. 이것은 ede 구성의 세부 사항을 편집 할 수있는 대화식 emacs 사용자 정의 버퍼를 표시합니다. Ldflags 섹션에서 [INS]을 클릭하십시오. 그러면 Link Flag:이라는 새 줄이 나오고 입력 할 수있는 다른 색 상자가 있습니다 (내 것은 회색 임). -Lother -laux을 입력하면 main을 컴파일 할 때 other/libaux.a이 포함됩니다. 그런 다음 버퍼의 맨 위에있는 [Accept]을 누르면 변경 사항이 저장되고 main.cpp로 다시 전환됩니다.

6) Makefile을 M-x ede-proj-regenerate으로 재생성하십시오.

이제 불행히도 Makefile은 main 대상을 먼저 만든 다음 other 디렉토리로 내려 가서 만듭니다. 불행히도 이것은 최상위 디렉토리의 make가 깨끗한 트리에서 작동하지 않는다는 것을 의미합니다. 이것이 왜 그런지는 모르겠지만 EDE로 만든 모든 프로젝트에서 결코 원하는 것은 아니기 때문입니다. 나는이 해킹을 제외하고 어떤 변화도 발견 할 수 없다.

7) Do M-x customize-project; Inference-Rules 아래 [INS]을 클릭하십시오. 그런 다음 대상을 입력하십시오 : all; 종속성 : aux main; 규칙 : [INS]; 문자열 @:. 이 마지막 명령은 탭이있는 빈 규칙 (예 : EDE 버그)에서 오류를 방지하기위한 것입니다. [Accept]을 클릭하고 Makefile을 재생성합니다.

이제 최상위 디렉토리에서 make를 실행할 수 있으며 main은 작동 가능한 실행 파일이어야합니다.

EDE가 저자가 아닌 다른 사람들이 사용할 준비가되지 않았다고 나는 빨리 확신하고 있습니다. 그것의 크기와 노력의 양에도 불구하고, 그것은 너무 버그가 많고, 직관이 너무 어둡고, 똑똑하지 않습니다. 그것은 수치 스럽습니다. 이맥스는 이런 것이 필요하다.

+0

질문을 던지고 난 후 프로젝트 유형을 계속 고치기 시작했고 나는 당신이 말하는 것과 비슷한 일을했다. 나는 유형 아카이브 (CGrabBuffer 용과 Utils 용)의 두 대상을 하나 대신 작성했습니다. 그리고 말했듯이, 나는'other' 디렉토리에서'make'를 먼저 호출해야했습니다. 이 진행 방법은 "이상한"것처럼 보이지만 작동합니다. :) – pparescasellas

+0

Eric의 새로운 튜토리얼은 확실히 도움이됩니다. 특히 Automake를 사용하면 이러한 많은 문제가 해결 될 것입니다. 즉,'other/Utils.cpp'와'other/CGrabBuffer.cpp'를'main' 타겟에 소스로 포함시킬 수 있다는 것을 깨달았습니다. 그러면 그들은 올바르게 빌드 될 것입니다. 당신은 그들을위한 별도의 목표조차 필요가 없습니다. – Mike