龙熠的技术小站

Clang介绍与安装

Low Level Virtual Machine (LLVM) 是一个开源的编译器架构,Clang 是 LLVM 的一个编译器前端。它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程语言。Clang 对源程序进行词法分析和语义分析,并将分析结果转换为 Abstract Syntax Tree ( 抽象语法树 ) ,最后使用 LLVM 作为后端代码的生成器。


安装

1.基础环境安装

1.硬件环境

OS Arch Compilers
Linux x86 GCC, Clang
Linux amd64 GCC, Clang
Linux ARM GCC, Clang
Linux PowerPC GCC, Clang
Solaris V9 (Ultrasparc) GCC
FreeBSD x861 GCC, Clang
FreeBSD amd64 GCC, Clang
MacOS X PowerPC GCC
MacOS X x86 GCC, Clang
Cygwin/Win32 x86 GCC
Windows x86 Visual Studio
Windows x64 x86-64 Visual Studio

2.软件环境

LLVM需要下列软件

Package Version Notes
GNU Make 3.79, 3.79.1 Makefile/build processor
GCC >=4.8.0 C/C++ compiler
python >=2.7 Automated test suite
zlib >=1.2.3.4 Compression library

3.CMake安装

CMake是一个跨平台的安装(编译)工具。
目前Clang已经使用CMake来编译,因此需要先下载CMake

CMake下载地址

4.Pathon安装(Optional)

Python会用于测试case

Python下载地址

2.安装步骤

1.创建LLVM源代码存放目录(llvm_source)

1
mkdir -p llvm_source

2.进入创建的目录

1
cd llvm_source

3.获取LLVM

1
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

4.获取Clang

1
2
3
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..

5.获取Clang工具

1
2
3
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../..

6.获取Compiler-RT工具

1
2
3
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..

7.获取libcxx

1
2
3
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
cd ../..

8.编译

打开CMake,选择两个地址,然后点击Configure

9.正常使用

打开命令行,输入clang,可以正常使用了

第一个例子

Hello world

1
2
3
4
5
6
#include <stdio.h>
int main(int argc, char **argv)
{
printf("hello world\n");
return 0;
}

基本的一些命令

1
2
3
4
5
clang --help ( 查看帮助信息 )
clang test.c -fsyntax-only ( 检查语法和词法正确性 )
clang test.c -S -emit-llvm -o test.bc ( 生成优化前的 llvm bitcode)
clang test.c -S -emit-llvm -o test.bc -O3 ( 生成优化的 llvm bitcode)
clang test.c -S -O3 -o test ( 生成可执行代码 )

如果一切正常,则终端上不会有任何错误显示

如果删除了hello,world语句的分号
再clang test.c
则会提示

1
2
3
4
test.c:4:28: error: expected ';' after expression
printf("hello world\n")
^
;

分享