'ctags'에 해당되는 글 2건

  1. 2013.05.08 ctags 추가 사용 옵션
  2. 2008.08.06 VIM + CSCOPE + CTAGS in cygwin (3)

ctags 추가 사용 옵션

Linux 2013. 5. 8. 09:28

안드로이드 소스를 볼 때, 빌드 전 인덱싱이 안되어있을 경우 out 디렉토리와 심볼릭링크를 제외할 때는 아래처럼...

ctags -R --exclude=out --links=no

--exclude뒤에는 pattern을 사용할 수 있으므로, 목적에 맞게 사용하면 될 듯 하고, 심볼릭링크를 tagging에 포함시킬지 아닐지는 --links에 [yes | no] 를 선택해주면 된다.

Posted by 강군님
TAG ctags

댓글을 달아 주세요

사용된 버전은 아래와 같다.

vim : 7.1
cscope : 15.6
exuberant Ctags : 5.7 (우리가 흔히 ctags라고 부르는 것이며 오리지널 ctags는 재귀 옵션인 -R이 안먹어서 손수 스크립트를 만들어줘야되는 불편을 수반한다 -_-)

vim이랑 ctags는 cygwin의 setup에서 설치가 되는데 cscope는 패키지에 선택이 안되므로 직접 컴파일해서 설치해야 한다.  물론 이를 위해 cygwin setup의 devel 부분의 웬만한 패키지들은 선택해놓는게 좋을거 같다 (하드가 완전 모자라지 않는 이상).

http://cscope.sourceforge.net/ 에서 최신 cscope를 download 받을 수 있다.  구글링해서 보니 static binary도 돌아다니는데, 내 cygwin 환경에서는 동작하지 않았다 (getline 어쩌고 하는 메세지인데 http://rommance.net/wikix/index.php?display=Cscope 아무래도 요거 적용이 안된거 같다.  어쨌든 static binary는 사용불가.

$ ./configure
$ make && make install

물론 INSTALL에 있는 내용 그대로다 -_-; 요렇게 하면 /usr/local/bin 에 cscope.exe가 생성이 된다.  cscope를 사용하기 위해서는 DB를 만들어야 되는데 맨날 치기 귀찮으니까 mkcscope.sh라는 스크립트를 만들어 놓자.

>> 2008년 6월 2일에 추가된 내용.  mkcscope.sh를 만드는 find에서 찾는 경로 지정을 . 으로 하면 상대경로로 찾아지므로 나중에 좀 불편해진다.  따라서 이걸 $PWD 로 바꾸면 절대경로로 바뀐다.  (env 해보면 알겠지만 PWD는 기본 환경 변수로 현재의 경로를 나타냄)

find $PWD \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files

cscope -o cscope.files
cscope -i cscope.files


위의 스크립트는 거의 표준처럼 쓰는 것 같다.  당연히 *.c *.cpp *.cc *.h *.s *.S를 대상으로 리다이렉션을 해서 목록을 만들고 요놈을 DB로 만들게 된다.

요거 끝났으면 실행권한 부여해서 (chmod +x mkcscope.sh) /bin에 복사해놓고 DB를 만든다. 

$ mkcscope.sh


하면 최상단의 바(-_-;)가 진행이 되고, 다 되면 Ctrl+D를 눌러 빠져나온다.  그럼 해당 디렉토리에 cscope.out이 생성된 것을 볼 수 있다.

이거 됐으면 vim이랑 연결시키는 부분을 처리해주어야 한다.  vim에는 이미 cscope에 대한 명령이 내장되어 있으니 몇개만 연결시켜주면 된다.  cygwin에 vim 설정이 아직 안된 상태라면 http://kangun.tistory.com/29 을 참고해서 기본 설정을 한뒤... .vimrc에 다음 내용을 추가한다.

set csprg=/usr/local/bin/cscope.exe
set csto=0
set cst
set nocsverb
cs add 절대경로/cscope.out


이렇게 하고 나서 vim을 띄우고 나서...

:cs find [query type] [symbol]


의 방식을 사용하면 원하는 symbol을 쉽게 찾을 수 있으며, query type은 아래와 같다.

0 or s : Find this C symbol
1 or g : Find this definition
2 or d : Find functions called by this function
3 or c : Find functions calling this function
4 or t : Find assignments to
6 or e : Find this egrep pattern
7 or f : Find this file
8 or i : Find files #including this file

뭐 ctags야... ctags -R해서 tags를 만들고 vimrc에 다음과 같이 설정해주면 된다.

set tags=/절대경로/ctags


이렇게 하고 Ctrl+]. Ctrl+T의 조합등으로 간단한 탐색이 가능해지며, ctags의 부가적인 기능들은 :help ctags 로 확인이 가능하다.
Posted by 강군님

댓글을 달아 주세요

  1. Favicon of https://happyoutlet.tistory.com 붕탱구 2009.01.05 09:44 신고  댓글주소  수정/삭제  댓글쓰기

    좋은글 잘보고 갑니다!!

  2. 양재모 2009.04.04 00:00  댓글주소  수정/삭제  댓글쓰기

    좋은글 감사합니다.
    쪽집게 처럼 필요한 내용만 딱딱있네요 ㅋ~