Keil MDK/MDK-ARM(ARM编译器)默认情况下会自动包含其安装目录下的标准头文件路径(如CMSIS库、设备头文件等)。具体机制如下:
-
默认自动包含:
新建工程或使用设备数据库选择芯片型号后,Keil会自动将必需的标准库头文件路径(如<ARM/INC>
目录下的CMSIS相关头文件路径)添加到项目的包含路径中,无需用户手动添加。 -
包含路径查看:
可在工程选项中确认自动包含的路径。进入“Options for Target” → “C/C++”选项卡 → “Include Paths”栏,通常能看到类似C:\Keil_v5\ARM\ARMCC\include
(编译器标准库)和C:\Keil_v5\ARM\Packs\ARM\CMSIS\<version>\CMSIS\Core\Include
(CMSIS核心)等由Keil自动添加的路径。 -
“No Auto Includes”选项的作用:
- 若勾选此选项(位于“Options for Target” → “C/C++”选项卡),Keil将取消自动包含安装目录下的标准头文件路径。
- 此时,用户必须手动将所有必需的头文件路径(包括原本由Keil自动添加的标准路径)添加到“Include Paths”中,否则编译时将无法找到标准库头文件。
-
头文件引用方式的影响:
- 使用尖括号
#include <header.h>
包含文件时,编译器优先在系统/编译器指定的路径(即Keil安装目录下的标准路径)中搜索。 - 使用双引号
#include "header.h"
包含文件时,编译器优先在当前源文件所在目录及用户项目指定的路径中搜索,若找不到才会搜索系统路径。 - 自动包含的标准路径对两种引用方式均有效,但
<>
方式更明确地指示使用系统路径。
- 使用尖括号
总结:
- √ 默认自动包含: Keil MDK在创建基于设备数据库的工程时,默认会自动包含安装目录下的标准库头文件路径。用户通常无需手动添加这些路径即可使用
#include <stm32f10x.h>
等标准头文件。 - ⚠ 可关闭自动包含: 通过勾选“No Auto Includes”选项可禁用此行为,禁用后用户必须手动添加所有必需路径。
- 🔍 引用方式优先级: 包含路径生效后,使用
<>
会优先在Keil自动包含的系统路径中查找头文件;使用""
则优先在用户项目路径中查找。