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 --

效果:

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

相关推荐
DLite1 天前
NLang 0.10.0发布:并发基础设施
编译器·虚拟线程·编译技术·nlang
Zwawa2 天前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
c语言·嵌入式·编译器
小哈里3 天前
【编译器】从计算机系统原理到 LLM 编译器与算子优化
大模型·编译器·1024程序员节·计算机系统原理·算子优化·推理平台
本地化文档7 天前
llvm-libc-docs-l10n
c语言·github·gitcode·sphinx·llvm·crowdin
程序喵大人14 天前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
Erishen17 天前
Lume C11编译器内部架构:从树形解释器到双LLVM后端的设计之旅
架构·开源·编译器
智嵌研习社23 天前
从 `.c` 到 `.elf`:GHS 编译器下 RH850 C 文件完整编译流程深度拆解
编译器·rh850·链接器·编译流程·汇编器·ghs
晓蛋1 个月前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
程序员Better1 个月前
我终于遇到一台懂 AI 编程的专业编程显示器!
人工智能·openai·编译器
_JoeZoe2 个月前
阿里云开发者社区用户服务协议
c语言·编译器·历史·应用领域·unix操作系统