clang-query 的编译安装与使用示例

1,clang query 概述

作用:

检查一个程序源码的抽象语法树,测试 AST 匹配器;

帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配;

2,clang-query 安装

准备:

bash 复制代码
git clone --recursive https://github.com/llvm/llvm-project.git
cd llvm-project/
git checkout  llvmorg-3.5.0
cp -r ./clang ./llvm/tools/
cp -r clang-tools-extra ./llvm/tools/clang/tools/extra
mkdir build_d ../local_d
cd build_d #其绝对路径为:/home/hipper/llvm_3_4_0_ex/browse/local_d,如下配置所用

配置:

bash 复制代码
cmake -G "Unix Makefiles"            \
-DCLANG_ENABLE_STATIC_ANALYZER=1     \
-DLLVM_ENABLE_ASSERTIONS=On          \
-DCMAKE_BUILD_TYPE=Debug             \
-DCMAKE_INSTALL_PREFIX=/home/hipper/llvm_3_4_0_ex/browse/local_d   \
-DLLVM_ENABLE_LIBCXX=1               \
-DLLVM_ENABLE_PROJECTS="all"         \
 ../llvm

编译安装:

bash 复制代码
make -j34
make install
cp bin/clang-query /home/hipper/llvm_3_4_0_ex/browse/local_d/bin/

3,测试运行

待测试程序源代码:

hello.c

cpp 复制代码
#if 0
#include <stdio.h>
#endif

#ifdef CAPITALIZE
#define WORLD "WORLD"
#else
#define WORLD "world"
#endif

extern int write(int, const char*, unsigned long);

int main(){
    write(1, "Hello, ", 7);
    write(1, WORLD, 5);
    write(1, "!\n", 2);
    return 0;

}

测试:

bash 复制代码
$ clang-query hello.c --

效果:

识别出函数调用表达式,并打印出来了

相关推荐
猪哥帅过吴彦祖3 天前
从源码到可执行文件:揭秘程序编译与执行的底层魔法
操作系统·编译原理·编译器
程序猿编码7 天前
基于LLVM的memcpy静态分析工具:设计思路与原理解析(C/C++代码实现)
c语言·c++·静态分析·llvm·llvm ir
黑客思维者17 天前
编译器工作原理的显微镜级拆解
编译器·工作原理
vincent&lin20 天前
Triton源码分析 - 目录
人工智能·ai编程·mlir·llvm
SixHateSeven1 个月前
🚀 TSX动态编译的黑科技,快如闪电!
前端·编译器
鹅毛在路上了1 个月前
CMake-gdb调试,解决LLVM ERROR: out of memory
c++·gdb·llvm
矮油0_o2 个月前
第一部分 -- ①语法分析的概要
java·编译器·解释器·语法分析
Jooolin2 个月前
【编程史】IDE 是谁发明的?从 punch cards 到 VS Code
ai编程·visual studio code·编译器
huangyuchi.3 个月前
【Linux】编译器gcc/g++及其库的详细介绍
linux·运维·服务器·笔记·编译器·gcc·g++
胡乱儿起个名3 个月前
Relay算子注册(在pytorch.py端调用)
c++·人工智能·tvm·编译器·ai编译器