前言

我相信使用Keil MDK的用户应该对以下几个图标都不陌生,但可能不是每个人都清楚这几个按钮的功能和异同,下面我会对这几个按键的功能进行一定说明。

image-20240713165744044

1. Translate

在Keil MDK中,Translate操作包括了预处理(Preprocessing)、编译(Compiling)和汇编(Assembling)步骤,但不包括链接(Linking)。Translate仅对当前激活文件进行操作,例如,当双击main.c文件使得main.c处于激活状态后,点击Translate,将会生成以下几种文件:

image-20240713181745980

  • ._i 文件:

._i 文件是Keil MDK特有的中间文件,这些文件可能包含优化信息或其他编译器特定的数据,以支持增量编译;

  • .crf 文件:

.crf 文件代表编译报告文件(Compilation Report File),包含了编译时间、编译选项、编译结果等详细信息;

  • .d 文件:

.d 文件记录了源文件与其头文件依赖关系,允许增量编译器确定当头文件更改时哪些源文件需要重新编译;

  • .o 文件:

.o 文件是目标文件(Object File),它们包含编译器生成的机器代码,但尚未链接成最终的可执行文件。每个源文件在编译后通常会生成一个对应的.o文件,这些文件随后会被链接器用来生成最终的可执行文件或库文件;

2. Build

在Keil MDK中,Build操作涵盖了将源代码转换成可执行文件的整个编译过程,包括:预处理(Preprocessing)、编译(Compiling)、汇编(Assembling)、链接(Linking)、生成可执行文件(Generating Executable)(可能还涵盖了:错误和警告检查、依赖性分析、优化、生成编译报告、清理旧的编译结果等)。

Build是一种增量编译方式,如果你的工程没有被编译过,那么Build操作将完整编译整个工程,这类似于Rebuild操作。当你编译过整个工程,并对当前工程的部分文件进行了修改,那么build操作将编译这次修改的文件及其依赖的文件。

增量编译方式可以有效提高编译的效率,让你不必等待太多的编译时间,但增量编译的使用是有一定限制的,如果随意使用增量编译,可能引入不必要的风险或者带来严重的错误。以下情况不推荐使用Build进行增量编译:

  • 宏定义发生更改:依赖该宏定义的源文件没有被正常识别依赖,增量编译可能忽略对相关源文件的重新编译,导致部分关联的源文件使用的还是上一次的宏定义;
  • 条件编译发生更改:如#ifdef#ifndef等,更改可能会影响条件编译的逻辑,导致错误的代码路径被包含或排除;
  • 项目设置发生更改:如目标平台、编译器设置、优化选项、预处理器定义或包含路径等项目配置发生更改
  • 代码重构:进行了大规模的代码重构,影响到多个文件的结构和逻辑;
  • 错误修复:修复了编译错误或警告,这可能需要重新编译以确保问题被彻底解决;
  • 库文件更新:库文件文件的更新可能影响很多源文件;

3. Rebuild

Rebuild同样涵盖了整个编译 过程,并且该操作会重新编译项目中的所有文件,不管它们是否有修改,这确保了生成的可执行文件是最新的。

4. Batch Build

BuildRebuild每次只能编译一个项目不同,Batch Build允许编译一个工作空间(Workspace)中的多个项目。Batch Build可以通过设置Batch Setup来指定需要批量编译的工程,Batch Build编译完成后,会给出提示信息。

image-20240714014250162

image-20240714014113883

image-20240714014226103

Batch Build还支持高程度自动化的场景,可以编写自动化脚本实现不打开 Keil 软件界面的自动化编译(后续补充)。

附录:Workspace

在Keil MDK中,Workspace是一个包含多个项目(Project)的集合,其后缀名通常为:.uvmpwWorkspace中的所有项目可以共享相同的工具链设置、库文件和配置,但每个项目都有其独立的源代码、宏定义和项目特定的设置,其优势还包括:

  • 项目集合:一个工作空间可以包含多个项目,使得开发者可以在单个工作区中管理和切换不同的项目;
  • 项目管理:在工程窗口(Project Window)中,可以显示工作空间下的所有工程项目内容,包括工程、组和源代码文件等;
  • 项目创建:通过 “Project” 菜单中的 “New Multi-Project Workspace” 选项,可以创建一个新的工作空间,进而在其中添加或移除项目;
  • 批量编译Workspace 允许进行批量编译操作,即 “Batch Build”,这可以一次性编译工作空间中的所有项目或选定的项目集合;
  • 项目选项配置:在 “Project” 菜单中,可以对每个项目进行配置,包括选择目标设备、编译选项等;
  • 工程目标选项:可以通过 “Options for Target” 对每个工程目标进行详细配置,包括编译器、链接器等设置;
  • 多项目调试:在调试时,可以针对工作空间中的不同项目设置断点、单步执行等调试操作;
  • 资源共享:在Workspace中,不同的项目可以共享相同的资源,如工具链设置、库文件等,但每个项目都保持独立;
  • 导出和导入:可以导出(Export)和导入(Import)整个工作空间或单个项目,方便项目迁移和版本控制;

在Keil MDK中,你可以通过以下步骤创建一个Workspace

菜单栏选择Project –> New Multi...,在弹出的对话框中选择Workspace存储位置及命名

image-20240714013453699

image-20240714013640626

在弹出的对话框中,选择你需要添加的所有项目

image-20240714013811661

添加完毕后点击完成,接下来你就可以享用Workapce带来的Batch Build等特性啦~

image-20240714013919958