c++ - clang 能代替 Exuberant Ctags 吗?

标签 c++ c++11 clang llvm exuberant-ctags

为了研究新文件,我习惯于使用适当的选项运行 ctags,问题是显然这个程序不支持 C++11,我只是很好地使用它,直到我发现这个程序的开发在几年前就结束了。

现在我需要一个适用于 C++11 及更高版本的等效工具,而且我记得仅 clang 就能够输出任何给定文件的 AST,所以我是想知道前端是否具有与我以前使用 ctags 所做的类似的功能。

例如,这是您可以在 C++ 模式下使用 ctags 轻松列出的实体

ctags --list-kinds=c++
c  classes
d  macro definitions
e  enumerators (values inside an enumeration)
f  function definitions
g  enumeration names
l  local variables [off]
m  class, struct, and union members
n  namespaces
p  function prototypes [off]
s  structure names
t  typedefs
u  union names
v  variable definitions
x  external and forward variable declarations [off]

clang 是否能够执行类似的任务?

最佳答案

看看rtags工具。它使用 clang 重新编译你的整个项目。 之后,您可以使用它来浏览源。唯一的问题是 AST 是在预处理器运行后构建的,因此被禁用的代码 宏不可用于导航。

该项目维护一组 elisp 绑定(bind),允许您从 emacs 控制 RTags。对于 vim 中的集成,请参阅 lyuts 的第三方项目或 Shane Harper .

关于c++ - clang 能代替 Exuberant Ctags 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961756/

相关文章:

c++ - 如何根据模板参数是否具有别名来专门化类型

c++ - 如何从 C++ 列表中删除重复值?

c++ - 在 ID3DBlob 中初始化 PS 的 DirectX11 CreatePixelShader 中出现访问冲突

c++ - C++中的动态分配列表

c++ - 对命令行中指定的某些文件运行 ClangTool

api - 使用 clang API 编译和运行 C 代码

build - 尝试构建LLVM和Clang时出现问题

c++ - 依赖倒置和普遍依赖

c++ - 替换预处理器定义中的字符

C++ 11 正则表达式堆栈溢出/VS2012