Skip to content

工具链 概念介绍

liuzikai edited this page Jan 17, 2022 · 4 revisions

工具链,指一系列工具,之所以成为“链”,是由于这一套工具紧密联系,一步一步实现从编辑代码到最终成品的过程。

编译器

我们都知道,代码要被机器运行,需要被编译成机器语言。将高级语言(如 C 和 C++)编译到机器语言,是由编译器完成的。我们一般编写在本地运行的 C 或 C++ 程序,常见的编译器有 gcc(g++)、clang(clang++)等(Python 等解释语言使用解释器,无编译过程,在此不展开)。

编译器就是一个程序,它接收输入的代码文件,输出可执行文件,例如,我们在终端中敲入以下指令,便可以将 test.c 编译成可执行文件 test。

gcc test.c -o test

而在我们嵌入式开发中,代码编译的平台与实际运行的平台并不相同,此时就需要用到交叉编译,简单来说,就是在一个编译器运行的架构(你的电脑)和输出的可执行文件运行的架构(嵌入式开发板)不同。我们使用的交叉编译工具链是 ARM-NONE-EABI。

自动化工具

如果我们只有简单的几个文件需要编译,直接调用编译器即可。但是,当我们的工程规模逐渐扩大,各种文件之间产生了复杂的依赖关系,我们就需要借助其他工具,用于自动化调用编译器,以正确的顺序,编译必要的文件。一个简单的例子:当我们修改了一个文件,我们希望只重新编译依赖于这个文件的文件,而不是重新编译整个工程的数百个文件。Make 是一个常见的自动化工具,它会根据配置文件(Makefiles 等),分析文件的依赖关系,再调用编译器。Make 本身也是一个可以直接在终端中运行的程序。

当工程继续复杂化,Make 也无法胜任时,我们会使用其他更高层次的自动化工具,用于自动生成 Make 的配置文件,再调用 Make。这里,我们使用的是 CMake。编译的过程,就变成了 CMake - Make - ARM-NONE-EABI。对于用户而言,Make 和 ARM-NONE-EABI 的调用都是由 CMake 自动完成的。

IDE

除去编译的部分,在前端,我们需要编辑代码的工具,这里我们使用的是 CLion。CLion 是 IDE(Integrated Development Environment 集成开发环境),是辅助用户编写代码的程序,其中包含了代码检查、自动补全、代码重构、运行调试等功能。同时,它作为编译工具(CMake)和调试工具(GDB)与用户的中间层。

调试器

在后端,我们需要将编译好的可执行文件烧录到开发板上,我们使用 OpenOCD。除了程序烧录,OpenOCD 全称是 Open On-Chip Debugger ,是一个开源的单片机工具,配合仿真器(adapter,连接开发板和电脑的硬件,例如 ST-Link,J-Link)。除了烧录程序,OpenOCD 还可以配合 GDB 使用,用于调试程序。



总结起来我们使用的工具链包含:CLion - CMake - (Make) - ARM-NONE-EABI - OpenOCD

接下来,通过一系列文档,我们能够最终实现通过 CLion 一键编译程序、一键烧录程序,并使用 CLion 内置的调试窗口显示信息、实现 IDE 内的调试功能。请按如下顺序阅读:

  1. 工具链 概念介绍 (本文)
  2. 工具链 安装 Mac工具链 安装 Win
  3. 工具链 工程配置
  4. 工具链 CMake 构建系统简介
  5. 工具链 CMake 进阶配置(可选)
  6. 工具链 调试远程烧录程序(可选)

由于工具链配置步骤繁多、涉及多个工具和软件,且操作系统各有不同,此教程难以确保每次成功,但只需要配置好一次,以后便可以一直使用。在配置过程中请保持细心和耐心,如果遇到问题,请先仔细阅读文档确保操作正确,然后,不妨尝试借助 Google 等尝试自己解决问题,这是很好的锻炼解决问题能力、深入了解工具链内部机制的机会。当然,也欢迎反馈或直接对此文档进行修改。

下一步

更新历史

  • 2018.07.19 首次发布。 liuzikai
  • 2018.11.10 文档重构。 liuzikai
  • 2019.01.30 适配新 CMake 工具链。 liuzikai
  • 2019.02.13 文档重构,增加了基础概念说明。 liuzikai
  • 2021.07.07 更新工具链系列文档顺序。liuzikai
  • 2022.01.17 修复一些 typo。liuzikai
Clone this wiki locally