发布版 Clang 版本

发布版 Clang 版本

入门:构建和运行 Clang

本页面为您提供了检出 Clang 和演示一些选项的最短路径。这应该能让您以最少的麻烦开始使用 Clang。如果您喜欢您看到的内容,请考虑加入Clang 社区。如果您遇到问题,请在LLVM 错误追踪器上提交错误报告。

发布版 Clang 版本

Clang 作为 LLVM 定期发布的一部分发布。您可以从https://llvm.net.cn/releases/下载发布版本。

Clang 还作为其各自打包系统的一部分,提供在所有主要 BSD 或 GNU/Linux 发行版中。从 Xcode 4.2 开始,Clang 是 Mac OS X 的默认编译器。

构建 Clang 并使用代码

在类 Unix 系统上

如果您想检出和构建 Clang,当前步骤如下

获取必需的工具。

请参阅LLVM 系统入门 - 需求。

另请注意,Python 是运行测试套件所需的。请从以下地址获取:https://pythonlang.cn/downloads/

标准构建过程使用 CMake。请从以下地址获取:https://cmake.com.cn/download/

检出 LLVM 项目

将目录更改为要放置 llvm 目录的位置。

git clone https://github.com/llvm/llvm-project.git

以上命令速度非常慢。可以通过创建浅克隆来加快速度。浅克隆节省存储空间并加快检出时间。这可以通过使用以下命令来完成

git clone --depth=1 https://github.com/llvm/llvm-project.git(使用此命令只能构建最新版本的 llvm)

对于只想编译的普通用户来说,此命令可以正常工作。但如果有人后来成为贡献者,由于他们无法从浅克隆中推送代码,因此需要将其转换为完整克隆

cd llvm-project

git fetch --unshallow

构建 LLVM 和 Clang

cd llvm-project

mkdir build(不支持树内构建)

cd build

这将在发布模式下构建 LLVM 和 Clang。或者,如果您需要调试构建,请将 Release 切换到 Debug。请参阅常用 cmake 变量以了解更多选项。

cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm

make

注意:对于后续的 Clang 开发,您只需运行make clang.

CMake 允许您为多个 IDE 生成项目文件:Xcode、Eclipse CDT4、CodeBlocks、Qt-Creator(使用 CodeBlocks 生成器)、KDevelop3。有关更多详细信息,请参阅使用 CMake 构建 LLVM 页面。

在 Linux 上,您可能需要 GCC 运行时库(例如crtbeginS.o、libstdc++.so)和 libstdc++ 头文件。一般来说,Clang 会检测与目标三元组匹配的知名 GCC 安装路径(在构建时配置(请参阅clang --version);由--target=)覆盖)并使用最大的版本。如果您的配置不符合任何标准场景,您可以设置--gcc-install-dir=到 GCC 安装目录(类似于/usr/lib/gcc/$triple/$major)。如果您的 GCC 安装在/usr/lib/gcc下,但使用不同的三元组,您可以设置--gcc-triple=$triple.

试用它(假设您将 llvm/build/bin 添加到您的路径中)

clang --help

clang file.c -fsyntax-only(检查正确性)

clang file.c -S -emit-llvm -o -(打印出未优化的 llvm 代码)

clang file.c -S -emit-llvm -o - -O3

clang file.c -S -O3 -o -(输出本机机器代码)

运行测试套件

make check-clang

使用 Visual Studio

以下内容详细介绍了在 Windows 上使用 Visual Studio 设置和构建 Clang

获取必需的工具

Git。源代码控制程序。请从以下地址获取:https://git-scm.cn/download

CMake。这用于生成 Visual Studio 解决方案和项目文件。请从以下地址获取:https://cmake.com.cn/download/

Visual Studio 2019 16.7 或更高版本

Python。它用于运行 clang 测试套件。请从以下地址获取:https://pythonlang.cn/download/

GnuWin32 工具Clang 和 LLVM 测试套件使用各种 GNU 核心实用程序,例如grep, sed和find。gnuwin32 包是最古老的,也是测试最充分的方式来获取这些工具。但是,git 为 Windows 提供的 MSys 实用程序已知可以正常工作。Cygwin 过去曾成功过,但没有经过充分测试。如果您还没有从其他来源获取核心实用程序,请从http://getgnuwin32.sourceforge.net/获取 gnuwin32。

检出 LLVM 和 Clang

git clone https://github.com/llvm/llvm-project.git

注意:一些 Clang 测试对行尾很敏感。确保检出文件不会将 LF 行尾转换为 CR+LF。如果您在 Windows 上使用 git,请确保您的core.autocrlf设置是 false。

运行 CMake 生成 Visual Studio 解决方案和项目文件

cd llvm-project

mkdir build(用于构建而不污染源目录)

cd build

如果您使用的是 Visual Studio 2019cmake -DLLVM_ENABLE_PROJECTS=clang -G "Visual Studio 16 2019" -A x64 -Thost=x64 ..\llvm

-Thost=x64是必需的,因为 32 位链接器会耗尽内存。

要生成 x86 二进制文件而不是 x64,请传递-A Win32.

有关 CMake 其他配置选项的信息,请参阅LLVM CMake 指南。

如果成功,以上步骤将在build目录中创建 LLVM.sln 文件。

构建 Clang

在 Visual Studio 中打开 LLVM.sln。

构建 "clang" 项目以仅构建编译器驱动程序和前端,或构建 "ALL_BUILD" 项目以构建所有内容,包括工具。

试用它(假设您已将 llvm/debug/bin 添加到您的路径中)。(请参阅上面的运行示例。)

有关在 Windows 上运行回归测试的信息,请参阅在 clang 上进行开发 - 使用 Windows 上的 Visual Studio 进行测试。

在 Visual Studio 旁边使用 Ninja

我们建议想要最快增量构建的开发人员使用Ninja 构建系统。您可以使用生成的 Visual Studio 项目文件编辑 Clang 源代码,并在其旁边生成一个第二个构建目录,以通过以下步骤运行测试

按照上述步骤检出 clang 和 LLVM

打开具有适当环境的开发人员命令提示符。

如果您打开开始菜单并搜索 "命令提示符",您应该会看到 Visual Studio 创建的快捷方式来执行此操作。要使用本机 x64 工具,请选择名为 "适用于 VS 2017 的 x64 本机工具命令提示符" 的快捷方式。

或者,启动一个常规的cmd提示符并运行适当的 vcvarsall.bat 命令。要获取 2017 x64 工具,这将是

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

mkdir build_ninja(或build,或使用您自己的组织)

cd build_ninja

set CC=cl(如果安装了 mingw GCC,则必须强制 CMake 选择 MSVC 而不是 mingw GCC)

set CXX=cl

cmake -GNinja -DLLVM_ENABLE_PROJECTS=clang ..\llvm

ninja clang这将仅构建 clang。

ninja check-clang这将运行 clang 测试。

Clang 编译器驱动程序(GCC 的直接替代品)

该clang工具是编译器驱动程序和前端,旨在成为gcc命令的直接替代品。以下是一些关于如何使用高级驱动程序的示例

$ cat t.c

#include

int main(int argc, char **argv) { printf("hello world\n"); }

$ clang t.c

$ ./a.out

hello world

'clang' 驱动程序旨在尽可能接近 GCC,以最大限度地提高可移植性。两者之间的主要区别在于,Clang 默认使用 gnu99 模式,而 GCC 默认使用 gnu89 模式。如果您看到与内联函数相关的奇怪的链接时错误,请尝试将 -std=gnu89 传递给 clang。

使用 Clang 的示例

$ cat ~/t.c

typedef float V __attribute__((vector_size(16)));

V foo(V a, V b) { return a+b*a; }

预处理

$ clang ~/t.c -E

# 1 "/Users/sabre/t.c" 1

typedef float V __attribute__((vector_size(16)));

V foo(V a, V b) { return a+b*a; }

类型检查

$ clang -fsyntax-only ~/t.c

GCC 选项

$ clang -fsyntax-only ~/t.c -pedantic

/Users/sabre/t.c:2:17: warning: extension used

typedef float V __attribute__((vector_size(16)));

^

1 diagnostic generated.

从 AST 进行漂亮打印

注意,-cc1参数表示应运行编译器前端,而不是驱动程序。编译器前端具有几个额外的 Clang 特定功能,这些功能未通过 GCC 兼容驱动程序接口公开。

$ clang -cc1 ~/t.c -ast-print

typedef float V __attribute__(( vector_size(16) ));

V foo(V a, V b) {

return a + b * a;

}

使用 LLVM 进行代码生成

$ clang ~/t.c -S -emit-llvm -o -

define <4 x float> @foo(<4 x float> %a, <4 x float> %b) {

entry:

%mul = mul <4 x float> %b, %a

%add = add <4 x float> %mul, %a

ret <4 x float> %add

}

$ clang -fomit-frame-pointer -O3 -S -o - t.c # On x86_64

...

_foo:

Leh_func_begin1:

mulps %xmm0, %xmm1

addps %xmm1, %xmm0

ret

Leh_func_end1:

🎨 相关创意作品

奶奶与孙女的关系简称(奶奶与孙女什么关系怎么填写)
背巾如何使用才正确?
365bet线路检测

背巾如何使用才正确?

📅 07-14 👁️ 4950
定了!2034年世界杯将在沙特举办
365bet线路检测

定了!2034年世界杯将在沙特举办

📅 07-24 👁️ 8661