2010년 4월 1일 목요일

window 에서 emacs 와 cscope 사용을 위한 준비



전에도 위키등에 몇번 적었는데 이번에 새로 세팅을 하게되서 최소한의 절차만 적어둔다.
후에 내가 읽어보는게 목적.

  1. cscope 다운로드
    http://code.google.com/p/cscope-win32/
    이번에 다시 뒤져보니 win32 port 가 다시 진행되는듯? 이전엔 16.0 이던가 하는 이상한 버전으로 오랫동안 멈춰있어서 쓰기가 좀 거북했었는데.. 우왕굿.
  2. xcscope.el 세팅
    나야 emacs 설정들을 mercurial 로 관리하고 있고 리파지토리를 dropbox 로 들고있으니 새로 받을 일은 없지만 적어둔다.
    [code]
    (require 'xcscope)[/code]
  3. cscope-indexer 설치
    나는 주로 c:/bin 또는 c:/opt/bin 에 넣어둔다. 이쪽 툴들도 dropbox 에 짱박아야 겠군...

    펼쳐두기..

  4. cscope-indexer 가 쉘스크립트이므로 msys shell 을 깔아준다.
    나야 어차피 mingw 를 자주 쓰니 문제 없지만 혹시나 cscope 때문에 쉘까지 까는게 싫다면 다른 방식으로 스크립트를 만들면 해결될듯. 목록만들고 cscope -b 돌리는게 전부다.
  5. emacs 가 cscope-indexer 를 실행할수 있도록 cscope-indexer.bat 파일을 만든다. 역시 c:/bin 또는 c:/opt/bin 을 애용중
    [code]
    C:\msys\1.0\bin\sh cscope-indexer %1 %2 %3 %4 %5 %6 %7 %8 %9[/code]
  6. 시스템헤더랄까? 윈도쪽에선 뭐라고 해야 하나 어쨌건 프로젝트마다 공통적으로 쓰는 헤더들을 찾도록 cscope-database-regexps 를 지정해준다. 아래는 간단한 예제
    [code]
    (setq cscope-database-regexps
          '(
            ;; 이런식으로 추가해 나가자. 상세한것은 C-h v cscope-database-regexps
            ("C:/HOME/src/foo/src"
             (t)
             ("C:/HOME/src/foo/extlibs"))
            ;; more
            ;; default
            ("."
             (t)
             ("C:/Boost/include/boost-1_42/boost")
             ("C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include")
             ("C:/Program Files/Microsoft Visual Studio 9.0/VC/include")
             t)))[/code]
  7. 위에서 지정한 세개의 기본검색 경로에 각각 cscope.out 을 만들어준다. 간단히 emacs 에서 C-c s I 로 지정해줘도 되지만 C++ 표준헤더의 경우 확장자가 없어서 이방법으로는 누락이 되니 직접 cscope.files 를 만들고 이를 통해 cscope.out 을 뽑는 수고를 해야 한다. gnu find 등을 쓰면 간단.


우왕ㅋ굳ㅋ
현재 나는 gnu global 이 주력 태깅툴이고 cscope 는 cscope-database-regexps 때문에 프로젝트 외부 코드를 따라갈때 쓴다. 즉 어떤 프로젝트 루트가 foo 일때 foo 이하는 빌드시 gtags 를 매번 돌려서 태깅을 해두고 코딩시 내가 찾으려는 심볼이 프로젝트 내부의 것인지 외부것인지 정도는 머리속에 들어있으니 상황따라 global, cscope 를 구분해서 쓰는 편.


댓글 없음: