cscope 와 ctag viim 의 관계..
리눅스 커널같은 소스를 사용한다고 하면...
저는 주로
function csc {
\rm ./list
\rm ./tags
\rm ./cscope.out
find ./ -name "*.[cCsShH]" >list
find ./ -name "Make*" >>list
find ./ -name "archi*" >>list
find ./ -name "*.c++" >>list
find ./ -name "*.cpp" >>list
find ./ -name "*.inc" >>list
ctags -R
cscope -i list
}
이렇게 해서 씁니다.
누가 쓰는거 copy 한건데요...
이렇게 하면
tags 파일도 엄청난 양의 DB 를 갖고 생기고
cscope.out 파일도 엄청난 양의 DB 가 생깁니다.
cscope -d
또는
cscope -i list
로 실행시켜서 소스를 분석하거나 코딩을 하는데요..
질문1)
ctags 도 DB
cscope.out도 DB
두개의 역할이 뭔차이가 있는건가요??이렇게 많은 용량의 DB 가 항상 있어야 하는게 이해가 잘안되서..
질문2)
그동안은 새로운 함수 예를들어
rambo()
를 만들었다고 한다면....
이 DB 파일들(cscope.out or tags 파일)
등을 항상 다시 만들었는데...
이렇게 안만들고 갱신하는 방법은 없을까요??시간 오래걸려서...
질문3)
다시만든다면 두개파일중에 어떤걸 다시 만들어야할지...
두개 다 다시만들어야 하나요??궁금해서리..
소스 디렉토리마다 tag 파일을 넣는다는 분도 계시고, tags+ 머 시켜서 ../../../ 머이렇게 놓는다는분도 계신데
프로젝트가 커서 디렉토리마다 만드는건 불가능합니다.
맨위의 디렉토리에서 ctags -R 로 하는게 각 디렉토리마다 만들어놓는것과 같은 효과인건가요??
그동안 모르고썼더니 궁금한게 많네요...
다른분이 더 잘 답변해 주시겠지요. 부분적으로 답변 시도..
Manual을 읽으시는게 답에 가장 정확할 것 같습니다. 두 파일은 서로 다른 프로그램이 사용하는거니 특별히 더 할말이 없기는 하지만, 눈에 보이는 차이가 있다면, ctags는 단순 symbol + 종류 + 위치의 txt 파일이지만 cscope가 생성하는 파일은 binary 형태의 db파일인데, 정의 뿐 아니라 해당 테그가 사용되는 위치까지 저장할 수 있습니다.
그래서 cscop로는 해당 함수가 어디에 쓰였는지 역으로 추적이 가능해 집니다. 혹시 ctags로 이 기능을 편리하게 사용할 방법이 있으면 조언 부탁드립니다.
ctags기능과 cscope 기능을 쓰기위해 두 정보가 있는건 당연한거 같아서 부언할게 없지만, 너무 큰게 문제라면 접근하지 않는 소스 부분을 검색 대상에서 제외하시는게 가장 좋을 것 같습니다. 보통 건드리는게 전체 소스는 아니니까요.
저도 비슷한 고민을 해왔습니다.
ctags의 man을 보시면, -a append 옵션이 있습니다. 저도 원하는 파일만 tags파일내에서 update를 하고 싶은데 그게 여의치 않더군요. 그래서 vim save trigger에 파일 저장후에 파일 경로 위 4단계 정도 뒤져서 tags파일에 append 해주고 사용합니다.
이렇게 하면 같은 디렉토리내에서 tags파일에 추가됩니다. 문제는 '갱신'되는 방법을 찾지 못해서 함수 위치 변경 같은걸 하면 남아 있는 기존 tag 때문에 다른 위치도 함께 추천하지요. 그래서 이 기능을 사용하다가 정보가 너무 벗어나면 새로 만들어 주곤 합니다. 일주일에 두번 정도?
cscope는 갱신이 잘안되나요? vim으로 cscope 파일에 접속후에 사용하면 갱신이 되었던 걸로 기억합니다. back reference도 잘찾아주었구요. 다만 vim 키 단축키 바인딩이 좀 부족하고 javascript는 back reference를 잘 못찾아서 주로 vimgrep으로 무식하게 찾아서 쓰다보니 잘 안쓰게 되네요.
둘다 다른프로그램이 쓰는 것이므로 1번에서 메뉴얼을 읽어 보시면 문제가 없을 겁니다.
반대로 프로젝트가 커서 디렉토리마다 만드는게 편할 경우가 있었습니다. 이상하게 커다란 오픈소스 가져다가 소스 좀 돌아다니려고 tag 생성을 걸면 프로그램이 죽는 경우가 종종 있더라구요. ;;
ps. 도무지 어떤 테그를 써야 원 질문의 인용 구문이 잘 나오는지 모르겠습니다. blockquote cite 정도를 써보다가 그냥 포기하고 code 테그로 올립니다.
댓글 달기