2014-06-18 6 views
1

auto-complete은 다중 모듈을 가진 Emacs C++ 프로젝트에서 작동하지 않습니다. 각 하위 모듈에 종속 된 헤더 파일은 모듈 자체와 다른 모듈에 모두 존재합니다. 즉, 하나의 모듈은 다른 모듈의 헤더 파일을 포함 할 수 있습니다. 다음은 디렉토리 간 헤더 파일을위한 Emacs-24 자동 완성

내 샘플 소스 코드입니다

. 
├── CMakeLists.txt 
├── my_inc 
│   ├── CMakeLists.txt 
│   ├── myadd.cpp 
│   └── myadd.h 
├── README.md 
└── src 
    ├── CMakeLists.txt 
    ├── Hello.java 
    ├── helper.cpp 
    ├── helper.h 
    └── main.cpp 

main.cpp :

#include "myadd.h" 
#include "helper.h" 
int main() { 
    MyAdd add_obj; 
    Helper h; 
    h.toString(); // Auto-complete works since Helper is in the same directory. 
    add_obj.  // Auto-complete for add_obj does not work 
        // because myadd.h is in another directory (my_inc). 
} 

방법 목록 내가 h.를 입력 할 때 팝업하지만 변수 add_obj의 클래스하지 않습니다 다른 모듈의 myadd.h에 정의되어 있습니다. my_inc.

  • (ede-cpp-root-project)

    이 솔루션은 여기서 일 않습니다


    나는 몇 가지 솔루션 (CEDET 관련)을 시도했다. 나는 많은 프로젝트를 갖고 있기 때문에 내 .emacs 대형을 만들 것

    1. 때문에이 일을 적용하지 않는다.

    2. :include-path 여기에서는 20 개 이상의 하위 모듈의 복잡한 헤더 종속성을 처리 할 수 ​​없으므로이 솔루션을 장난감과 비슷하게 만듭니다. 나는 .emacs에서 구성을 분리하는 것을 선호합니다.

  • 내가 ede-new 및 C c를 통해 프로젝트와 대상을 만들 EDE 프로젝트. 이것은 이름 대신 컴파일을 위해서만 사용되며, 메소드는 자동 완성됩니다.

  • this question에 용액에 설명 된 바와 같이 ede-generic-project

    manual on ede-generic-project하지만이 오류 받고 있어요 : 나는 실행하면

    eieio-oref: Wrong type argument: (or eieio-object-p class-p), nil

    을 :

    MXede-customize-projectRET에게 (ede-enable-generic-projects) 이후.


환경 : 나는 이맥스 24.3 사용하고 auto-completecedet2.0를 설치했습니다.

답변

0

1 단계 프로젝트, 헤더 파일 및 완료와 관련된 문제를 해결할 때 찾을 수없는 경우 헤더 파일을 강조 표시하는 메커니즘이 포함 된 (global-semantic-decoration-mode 1)을 활성화하는 것입니다. 신속하게 구성 문제를 해결하는 데 도움이됩니다.

.emacs 파일을 깨끗하게 유지하고 프로젝트 지원을 받고 싶다면 일반 프로젝트 유형이 좋은 오류입니다. 오류가 나타나기 시작하기 전까지는 좋은 방법입니다. 그것은이 글을 쓰고있는 ede-ldf 지점 (2014 년 7 월 14 일) 아래의 CEDET bzr 저장소에서 수정되며 곧 언젠가 병합 될 것입니다.

많은 하위 모듈이있는 경우 GNU Global과 같은 도구를 사용할 수도 있습니다. cedet 매뉴얼은 GNU Global 사용에 관한 짧은 섹션을 포함하고 있으며, 여기에는 파일 찾기에 필요한 스 니펫이 포함되어 있습니다. 그런 식으로 Global은 모든 헤더를 추적하고이를 사용하여 헤더를 찾습니다. 모든 머리글에 고유 한 이름이 있으면 모두 설정됩니다. 파일 "myadd.h"가 여러 위치에 있고 C 파일이있는 위치를 기반으로 "myadd.h"를 선택해야하는 경우 운이 없으며이를 수행하는 데 사용자 정의 프로젝트 유형이 필요합니다.

각 구성을 변경 한 후에는 캐시를 새로 고치려면 찾길 원하는 헤더가 포함 된 버퍼를 강제로 다시 분석해야합니다. 강제로 사용하려면 C-u M-x bovinate RET을 사용하십시오.