척박한 유닉스 환경에서의 개발을 위한 vim + cscope 설치.

위대한 비주얼스튜디오가 없어서 개발하기 빡센 유닉스(터미널)환경에서 살아가기 위한 몸부림.


vim + cscope를 이용한 코드분석방법.


우선 현재 사용하고 있는 vim이 cscope 를 지원하는지 체크해 봐야 합니다.


$ vi –version | grep cscope

를 입력해 보시면 cscope라는 단어 앞에 +, – 가 붙어있을텐데 + 가 붙어있다면 현재 vim을 그대로 사용할수 있는거고 – 가 붙어있다면 다시 컴파일해야 합니다.


Vim을 다시 컴파일 해야 할 경우


http://www.vim.org 에서 최신 vim의 unix 버전 소스를 다운 받습니다. 대략 (vim-7.0.tar.gz)  이런 이름.
이걸 유닉스에서 압축을 풀고 해당 디렉토리안에 들어가면 Makefile, configure 등이 있는데


우선


$ ./configure –enable-cscope –enable-multibyte

를 입력하면 뭔가 체크하면서 make 파일을 생성합니다.
그리고 나서


$make

하시면 컴파일이 됩니다.
Src 폴더 안쪽으로 들어가면 vim 실행파일이 생성되어 있습니다. 정상적으로 실행이 되는지


$./vim

으로 테스트해 봅니다.


Vim 7.0의 경우 vim 환경변수가 필요한데 해당 변수는 vim이 실행시 읽어들이는 syntax 나 플러그인 파일의 기준경로입니다.
기본적으로는 /usr/local/share/vim 으로 되어있습니다. 만약 잘못되어 있다면 수정해 줍니다.
Vim 이 정상적으로 잘 실행이 되면 자신의 local/bin 경로에 넣어두거나 쉘의 alias를 수정하여 새롭게 컴파일한 vim이 기본적으로 실행되도록 해놓습니다.



 


Cscope 준비


$cscope


를 실행해서 뭔가 파일입력하라고 나온다거나 하면 cscope가 시스템에 있어서 따로 컴파일할 필요가 없습니다.


Cscope 컴파일
만약 정상실행이 안되서 따로 컴파일이 필요하다면 cscope.sourceforge.org 에서 최신버전을 다운받습니다. (cscope-15.6.tar.gz)


이것도 유닉스에다 받아서 압축을 풀고 해당 디렉토리로 들어가서


$./configure
$make

를 입력해서 컴파일 합니다.
Src 디렉토리에 들어가면 cscope 라는 실행파일이 생성되어있습니다.
해당 파일을 자신의 local/bin에 넣습니다.


Cscope 설정


이제 cscope의 사용을 편리하게 하기 위해서 스크립트를 작성합니다.
스크립트명은 대략 mkcscope 라고 하고 코드는





  1. #!/bin/sh


  2. rm -rf cscope.out cscope.files


  3. find . \( -name ‘*.c’ -o -name ‘*.cpp’ -o -name ‘*.cc’ -o -name ‘*.h’ -o -name ‘*.m’ -o -name ‘*.s’ -o -name ‘*.S’ \) -print > cscope.files


  4. cscope -i cscope.files

입니다. 해당 스크립트를 실행한 위치에서 위에 언급한 소스파일에 대한 심볼 데이타 베이스를 만들라는 의미입니다.
위 스크립트 역시 local/bin에 넣어두고 실행권한을 줍니다.


이제 vim에서 cscope를 사용할수 있도록 설정을 해주어야 합니다.
자신의 홈디렉토리의 .vimrc 파일에





  1. ” cscope 설정


  2. set csprg=$HOME/local/bin/cscope


  3. set csto=0


  4. set cst


  5. set nocsverb


  6.  


  7. 작업 중인 디렉토리 밑의 내용 추가


  8. if filereadable(“cscope.out”)


  9.  cs add cscope.out


  10. ” 아니면 환경 변수에 설정된 내용 추가


  11. elseif $CSCOPE_DB != “


  12. cs add $CSCOPE_DB


  13. endif


  14. set cscopeverbose “ 파일 추가 후에만 자세한 내용 보이게 함


  15.  


  16. ” cscope 단축키


  17. nmap <C-[>s :cs find s <C-R>=expand(“<cword>“)<CR><CR>


  18. nmap <C-[>g :cs find g <C-R>=expand(“<cword>“)<CR><CR>


  19. nmap <C-[>c :cs find c <C-R>=expand(“<cword>“)<CR><CR>


  20. nmap <C-[>t :cs find t <C-R>=expand(“<cword>“)<CR><CR>


  21. nmap <C-[>e :cs find e <C-R>=expand(“<cword>“)<CR><CR>


  22. nmap <C-[>f :cs find f <C-R>=expand(“<cfile>“)<CR><CR>


  23. nmap <C-[>i :cs find i ^<C-R>=expand(“<cfile>“)<CR>$<CR>


  24. nmap <C-[>d :cs find d <C-R>=expand(“<cword>“)<CR><CR>


  25.  




을 추가합니다.
이제 설정이 종료되었습니다.


사용법


소스가 있는 디렉토리로 이동하여


$mkcscope

를 입력하면 cscope.out 이라는 파일이 생성됩니다. (해당 파일은 심볼의 DB파일로 소스가 변경이 된다면 갱신을 해주는 것이 좋습니다.)


이후 vim 을 이용하여 해당 디렉토리의 소스의 편집을 시작합니다.
Vim 사용중 특정 함수가 어디서 호출되는지 알고 싶다면


:cs find s [함수명, 클래스명]

을 입력합니다. 이후 리스트가 나오고 번호를 입력하여 해당 소스의 위치로 이동이 가능합니다.
소스 코드의 위치 이동후 소스를 다 확인했으면


CTRL+o 로 이전화면으로 이동 가능하며
CTRL+i 로 다시 cscope에 의해 옮겨 졌던 화면이로 이동가능합니다.


만약 함수가 어디서 선언되었는지 알고 싶다면


:cs find g [함수명or 클래스명]

을 입력합니다.


위에서 .vimrc에 입력한 내용에는 단축키도 있는데
특정 단어위에 커서를 두고


“CTRL+[“ + “s”
또는
“CTRL+[“ + “g”

로 위의 cs 명령과 동일한 동작을 수행합니다.


후기.


C분석은 꽤 잘되는 편이고 C++은 문법상 클래스명과 함수명이 같이 나오므로 나름 보기 나쁘지 않을것 같은데 OBJ-C 같은 경우는 문법이 함수명 근처에 클래스명이 존재하지 않아서 보기 좀 빡셈…

“척박한 유닉스 환경에서의 개발을 위한 vim + cscope 설치.”에 대한 4개의 댓글

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다