gtags的使用

是啥?

类似于ctags, 为代码添加标签, 但是对于c++, c语言, 更精确.

使用

生成文件列表

1
2
3
4
5
6
:: windows
> dir [path] /a-d /b /s *.cpp *.h > filelist.txt

:: windows
> find [path] -type f -regex ".*\(\.cpp\|\.c\)$" > filelist.txt
> find . -type f \( -name "*.java" -o -name "*.cpp" -o -name "*.h" \)

生成标签

1
2
3
4
5
6
7
8
9
10
> gtags
:: 根据文件列表生成
> gtags -f filelist
:: 可以使用ctags解析gtags不支持的语言
> gtags -f filelist --gtagslabel ctags

:: 生成的文件的含义
:: GTAGS:所有变量,函数定义的相关信息
:: GRTAGS:所有变量,函数被引用的相关信息
:: GPATH:源代码中每个文件的信息

查看文件内容

1
2
3
> gtags --dump GPATH
> gtags --dump GTAGS
> gtags --dump GRTAGS

更新单个文件

1
> gtags --single-update filename

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查找函数
$ global func1
# 话说支持Posix 正则, 待验证
$ global 'func[1-3]' # func1, func2, func3 match
# 引用
$ global -r func
# 显示详细信息 (显示定义行的信息)
$ global -x func
# 显示匹配的内容的文件的完整路径(绝对路径)
$ global -a func
# 显示不在GTAGS里面定义的symbols(感觉没屌用)
$ global -s X
# 使用指定的模式定位(没懂啥意思, 懂了补充)
$ global -g '#ifdef'
# 定位某个文件(可以用正则, 没多大屌用)
$ global -P fileB | '1/' | '\.c$'
# 查看某一个文件的tags
$ global -f path/filename
# 在当前文件夹下检索
$ global -l func
# 如果你忘了symbol名字, 可以用-c进行提示
$ global -c create