Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿซ ํ•™๊ต/๐Ÿ“Œ ๋ฆฌ๋ˆ…์Šค

[๋ฆฌ๋ˆ…์Šค] ctags ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋ฐ˜์‘ํ˜•

 

 

 

 

๐Ÿท๏ธ ctags๋ž€

ctags๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋‹ˆ,

๋ฐฑ๊ณผ์‚ฌ์ „์˜ ์ธ๋ฑ์Šค(์ฐพ์•„๋ณด๊ธฐ)์™€ ๋น„์Šทํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ๋ฑ์Šค์—์„œ '๊ณต๋ฃก'์„ ์ฐพ์œผ๋ฉด,

์˜†์— ๊ทธ ๋‹จ์–ด๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋‚˜์˜ค๊ณ ,

์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€์„œ ๊ณต๋ฃก์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ctags๋Š” ๋‚ด ์ฝ”๋“œ ์ „์ฒด์— ๋Œ€ํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ '์ด ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์ •์˜ํ–ˆ๋”๋ผ?' ํ•˜๊ณ  ๊ถ๊ธˆํ•ด์กŒ์„ ๋•Œ,

ํ•จ์ˆ˜ ์ด๋ฆ„์— ์ปค์„œ๋ฅผ ๋‘๊ณ   ctrl + ]  ๋งŒ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋ฐ”๋กœ ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋œ ์œ„์น˜๋กœ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ๊ฐ„๋‹จํ•œ ์‹ค์Šต

1) ์„ค์น˜

์šฐ๋ถ„ํˆฌ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.

sudo apt update
sudo apt install exuberant-ctags

 

 

2) ์—ฐ์Šต์šฉ ํด๋” ๋งŒ๋“ค๊ธฐ

๊ฐ„๋‹จํ•˜๊ฒŒ ์‹ค์Šตํ•œ ๋’ค, ํด๋”๋ฅผ ๋ฐ”๋กœ ์ง€์›Œ๋ฒ„๋ฆฌ๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” ๋”ฐ๋กœ ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

mkdir -p ~/ctags-test
cd ~/ctags-test

 

 

3) ์˜ˆ์ œ ์ฝ”๋“œ ํŒŒ์ผ 2๊ฐœ ๋งŒ๋“ค๊ธฐ

[ util.c ]

๋จผ์ € ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

vim util.c

 

๊ทธ๋ฆฌ๊ณ  i ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ํŽธ์ง‘ ๋ชจ๋“œ๋กœ ๋ฐ”๊ฟ”์ค€ ํ›„,

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ add ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์ค€๋‹ค.

int add(int a, int b) {
    return a + b;
}

 

 

 

[ main.c ]

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์ค€๋‹ค.

vim main.c

 

๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ์™€ ๋™์ด๋ž—๊ฒŒ i ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ํŽธ์ง‘ ๋ชจ๋“œ๋กœ ๋ฐ”๊พผ ํ›„,

์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•œ main ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์ค€๋‹ค.

#include <stdio.h>

int add(int a, int b); // util.c์— ์žˆ๋Š” ํ•จ์ˆ˜์˜ ์„ ์–ธ

int main() {
    int result = add(3, 5);
    printf("result = %d\n", result);
    return 0;
}

 

 

4) ctags๋กœ ์ธ๋ฑ์Šค(์ฐพ์•„๋ณด๊ธฐ) ๋งŒ๋“ค๊ธฐ

ctags๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,

๊ผญ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ง์ ‘ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค.

ctags -R .
ls -l tags   # 'tags'๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ๊ธด ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

5) ์ง์ ‘ ํ™•์ธํ•ด๋ณด๊ธฐ

๋‹ค์‹œ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ main.c ํŒŒ์ผ์„ ์—ด์–ด์„œ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด add๋ผ๋Š” ๋‹จ์–ด ์œ„๋กœ ์ปค์„œ๋ฅผ ์ด๋™ํ•œ๋‹ค.

vim main.c

 

 

์ปค์„œ๋ฅผ ์˜ฎ๊ฒผ๋‹ค๋ฉด,  ctrl + ]  ๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ž๋™์œผ๋กœ util.c ์— ์žˆ๋Š” add ํ•จ์ˆ˜๊ฐ€ ์—ด๋ฆฌ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋‹ค์‹œ ์›๋ž˜ ์ฝ”๋“œ๋กœ ๋Œ์•„์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด,  ctrl + t  ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

 

+) ์–ธ์ œ ๋‹ค์‹œ ctags๋ฅผ ๋Œ๋ ค์•ผ ํ• ๊นŒ?

์šฐ๋ฆฌ๊ฐ€ ์˜›๋‚  ์ง€๋„๋ฅผ ๋“ค๊ณ  ๊ตญ๋‚ด ์—ฌํ–‰์„ ํ•˜๋ฉด, ์ƒˆ๋กœ ์ƒ๊ธด ๊ธธ๋“ค์€ ์ฐพ์„ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ

ํŒŒ์ผ์„ ๋งŽ์ด ๊ณ ์น˜๊ฑฐ๋‚˜ ํด๋” ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด, ๋‹น์—ฐํžˆ ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค(์ฐพ์•„๋ณด๊ธฐ)๋กœ๋Š” ๋ชจ๋“  ์œ„์น˜๋ฅผ ์ •ํ™•ํžˆ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๋‹ค.

 

๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์กŒ์„ ๋•Œ๋Š”,

์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ tags ํŒŒ์ผ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ctags -R .

 

 


๐Ÿ“š ๊ฒฐ๋ก 

์ด๋ฒˆ์— ๋ฆฌ๋ˆ…์Šค ์‹ค์Šต ์ˆ˜์—…์„ ํ†ตํ•ด ctags๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ

์™œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์—ฌ์ „ํžˆ ์ด ๋„๊ตฌ๋ฅผ ์“ฐ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

IDE์—์„œ๋Š” ๋งˆ์šฐ์Šค ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ํ•จ์ˆ˜ ์ •์˜๋‚˜ ์ฐธ์กฐ๋กœ ์‰ฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ,

๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š์•„์„œ ๋‹ต๋‹ตํ–ˆ๋Š”๋ฐ,

ctags๊ฐ€ ๋งŒ๋“ค์–ด์ฃผ๋Š” tags ํŒŒ์ผ๋กœ Vim์—์„œ๋„ ๋งˆ์น˜ IDE์ฒ˜๋Ÿผ ๋น ๋ฅด๊ฒŒ ์ฝ”๋“œ ์‚ฌ์ด๋ฅผ ์˜ค๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ต‰์žฅํžˆ ์‹ ๊ธฐํ–ˆ๋‹ค.

 

์•„์ง ํ•™๊ธฐ ์ดˆ๋ฐ˜์ด๋ผ ์‹ค์Šต๋„ ๊ฐ„๋‹จํ•˜๊ธด ํ•˜์ง€๋งŒ,

๊ทธ๋ž˜๋„ ์˜ค๋Š˜์˜ ์‹ค์Šต์„ ํ†ตํ•ด์„œ ๋„๊ตฌ๋ฅผ ์กฐ๊ธˆ๋งŒ ์•Œ์•„๋‘๋ฉด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ๋ช‡ ๋ฐฐ๋Š” ์˜ฌ๋ผ๊ฐ„๋‹ค๋Š” ๊ตํ›ˆ์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฐ˜์‘ํ˜•