llvm clang编译工具不仅用于编译,还可以用来对代码分析。也可以用于代码翻译。
libclang python binding 安装过程:
下载llvm,clang,编译后生成一大票库文件。
编译可以通过常见的configure,make方法,也可以通过cmake.
而libclang python binding是通过ctype来访问libClang的,无需编译。
将libclang python binding的python文件拷贝到当前目录,并且设置一下libClang的路径就可以使用了。
#!/usr/bin/env python """ Usage: call with <filename> <typename> """ import sys import clang.cindex from clang.cindex import Config Config.set_library_path("/Users/mahongquan/llvm3.4/llvm_build/lib") #os.environ["DYLD_LIBRARY_PATH"]="/Users/mahongquan/llvm3.4/llvm_build/lib" def find_typerefs(node, typename): """ Find all references to the type named ‘typename‘ """ if node.kind.is_reference(): ref_node = clang.cindex.Cursor_ref(node) if ref_node.spelling == typename: print ‘Found %s [line=%s, col=%s]‘ % ( typename, node.location.line, node.location.column) # Recurse for children of this node for c in node.get_children(): find_typerefs(c, typename) index = clang.cindex.Index.create() tu = index.parse(sys.argv[1]) print ‘Translation unit:‘, tu.spelling find_typerefs(tu.cursor, sys.argv[2])