stack over flow的回答解答了各个版本的ndk的toolchains目录的情况和作用,主要将的是llvm。 https://stackoverflow.com/questions/54785091/whats-the-use-of-llvm-in-android-ndk-toolchains

android ndk的官网给出的连接,里面有不少的概念。

https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md

LLVM和Clang

LLVM wikiLLVM是一套编译器基础设施项目,为自由软件,以C++写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期链接时期运行时期以及“闲置时期”的优化。
它最早以C/C++为实现对象,而目前它已支持包括ActionScriptAdaD语言FortranGLSLHaskellJava字节码、Objective-CSwiftPythonRubyCrystalRustScala[2]以及C#[3]等语言。

Clang wikiClang(发音为/ˈklæŋ/类似英文单字clang[3]) 是一个CC++Objective-CObjective-C++编程语言的编译器前端。它采用了LLVM作为其后端,由LLVM2.6开始,一起发布新版本。它的目标是提供一个GNU编译器套装(GCC)的替代品,支持了GNU编译器大多数的编译设置以及非官方语言的扩展。作者是克里斯·拉特纳(Chris Lattner),在苹果公司的赞助支持下进行开发,而源代码许可是使用类BSD的伊利诺伊大学厄巴纳-香槟分校开源码许可。
Clang项目包括Clang前端和Clang静态分析器等。[4]

什么是Toolchains

toolchains中文我们叫做工具链,他出现在交叉编译的概念上。
工具链是compiler+linker+librarian+其他任何用于编译可执行文件或静态动态库的工具的集合。

在这个概念下,host指的是你所用来编译的开发机器,target指的是你编译的代码要运行的机器。当host和target是同一类型的设备时,我们称为原生编译。当host和target是不同类型的机器时,我们称为交叉编译。

我们何时需要用到NDK的Toolchains?

在进行ndk开发的时候,我们用于构建源码的方式有3种:ndk-build、cmake、使用toolchains编译。
分别对应在官网的3个构建方式介绍中:
image.png

当我们要将ffmpeg、x264等一些autoconf项目(automake,autoconf使用详解)编译成.so库或者.a库来使用的时候,就需要我们自己来使用toolchians了。

Toolchains目录介绍

toolchains中的编译器在不同版本的ndk上的介绍

介绍llvm和gcc的编译器对应的位置

介绍llvm和gcc的编译器的使用差异