[Vim/Linux] cscope 사용 방법 (CMD 정리)

cscope는 Linux Vim Editor 에서 변수, 함수, 매크로, 구조체 등을 검색하기 위해서 사용된다 (출처 1). ctag의 부족한 부분을 채워주기 위해서 많이 사용된다고 한다. cscope 정리 이후에 ctag에 관련된 부분도 따로 정리할 계획이다. 나의 경우 보통 ctag는 함수가 선언된 부분을 찾아서 이동하기 위해서 많이 사용하였다. 하지만 ctag의 경우 해당 함수가 호출되는 부분을 찾아주지 못하는 단점(?)이 있다. 그래서 cscope을 사용하게 되었다.

Ubuntu Linux (14.04) Vim에서 cscope을 사용하기 위해 설정하는 방법을 정리하였다.

먼저 아래 CMD를 사용하여 cscope 설치를 한다.

$sudo apt-get install cscope

설치가 완료되면 cscope Database를 생성해야 한다. 여기서 의미하는 Database란 변수, 함수, 매크로 등의 위치를 파악하는 것으로 추측된다. Database 생성하고자 하는 프로젝트의 폴더 위치로 이동한다. cscope Database를 생성하기 이전에 변수, 함수, 매크로 등에 대한 Database를 생성하고자 하는 파일 리스트를 정리해야 한다. 예를 들어서 .c, .h로 끝나는 파일에 대한 변수, 함수, 매크로 등에 대한 Database 생성을 한다고 가정하면 아래와 같이 파일 리스트를 먼저 찾아서 정리해야 한다.

$find ./ \( -name “*.c” -o -name “*.h” \) -print > cscope.filelist 

$find ./ \( -name “*.c” || -name “*.h” \) -print (특정 OS의 경우 -o 대신 || 을 사용해야 한다)

$find ./ \( -name “*.c” -or -name “*.h” \) -print (특정 OS의 경우 -o, || 대신 -or 을 사용해야 한다)

위의 CMD를 실행하면 cscope.filelist 파일에 .c, .h로 끝나는 모든 파일을 cscope.filelist에 저장된다.

  • cscope.filelist에 절대 경로의 파일 위치가 저장된다. 나의 경우 Vim에서 %s CMD를 사용하여 상대 경로를 절대 경로로 변경하였다. 절대 경로로 Database를 생성하면 Vim을 어떤 위치(Path)에서 실행하여도 함수, 매크로 등에 대한 선언문을 찾을 수 있다.
  • $%s/\.\//\/home\/mkblog\//g  (“./” 을 “/home/mkblog/” 로 변경하는 CMD)

만약 다른 파일을 추가로 포함하고 싶으면 “*.h” 뒤에 -o -name “filename”을 추가하면 된다. cscope.filelist에 파일 리스트를 정리하고 나면 cscope Database를 생성할 단계이다. Database라 해봐야 단순히 파일로 변수, 함수, 매크로 등의 위치를 출력하는 것이 전부이다. Database 생성을 위해서 아래와 같이 CMD를 실행하면 된다.

$cscope -i cscope.files

그림 1: cscope -i cmd 실행 후 사진

위 CMD를 실행하면 그림 1과 같은 창이 나타난다 (Linux Kernel 과 같이 파일의 수가 많은 경우 해당 화면이 나타나는 데 시간이 조금 많이 걸리는 경우도 있다). 해당 창의 정확한 의도는 아직 잘 모르겠으나 Ctrl-d를 누르면 창에서 빠져나오면서 cscope.out 파일이 생성된다. 이제 Ubuntu Vim에서 cscope.out 파일을 사용할 수 있도록 설정해야 한다. 나의 경우 Vim이 실행하면 자동으로 cscope.out을 로딩할 수 있도록 ~/.vimrc에 아래 cmd를 추가하였다.

$cs add /PATH/cscope.out

PATH는 cscope.out 파일의 위치이다. 위의 CMD를 ~/.vimrc에 파일을 추가하고 나면 vim을 실행하면 자동으로 cscope Database를 Loading 하게 된다. 이제 Vim에서 cscope를 사용하여 변수, 함수 등을 검색할 수 있다. Vim에서 사용하는 cscope CMD를 아래에 정리하였다. 아래의 CMD를 실행하면 “start_kernel” 함수 이름을 검색할 수 있다.

$cs find s start_kernel

cscope는 기본적으로 위 cmd에서 3번째 Parameter만 변경하면 다양한 함수, 전역 선언 등을 검색할 수 있다. 아래 테이블은 3번째 Parameter 값의 정리하였다.

검색 유형 설명
sC 심볼을 검색한다.
g전역 선언을 검색한다.
d함수에 의해 호출되는 함수들을 검색한다.
c함수를 호출하는 함수들을 검색한다.
t텍스트 문자열을 검색한다.
e확장 정규식을 사용하여 검색한다.
f파일 이름을 검색한다.
i 파일을 인클루드 하는 파일을 검사한다.

출처

  1. http://csl.skku.edu/uploads/SSE3044F12/vim_ctags_cscope.pdf

Leave a Comment