keil 编译头文件路径添加
“自动默认包含 + 手动灵活配置”
⚙️ 核心机制:自动包含与手动配置
当你创建一个新工程并选择好芯片型号后,Keil 就已经在幕后做了很多工作:
-
自动包含路径:Keil 会自动将芯片支持包(
.pack文件)里的设备头文件路径,以及编译器标准库和 CMSIS 库的路径,添加到项目的包含路径中。你不需要做任何操作,就能直接使用#include <stm32f10x.h>这样的语句。 -
手动添加路径:当你需要包含自己写的或第三方库的头文件时,就需要手动配置。操作路径是:点击“魔术棒” -> Options for Target -> C/C++ 选项卡 -> 在 Include Paths 中添加你的头文件所在文件夹的路径。
🚫 “No Auto Includes”选项:关闭自动包含
在 C/C++ 选项卡中,有一个 “No Auto Includes” 选项。
-
作用:勾选后,Keil 将不再自动包含安装目录下的标准库和 CMSIS 头文件路径。
-
后果:你必须手动在
Include Paths中添加所有需要的路径,包括编译器标准库等,否则编译会报错。 -
使用场景:当你需要完全控制项目所使用的库版本,避免与Keil自带的库发生冲突时,可以考虑开启此选项。
📂 如何查看和验证包含路径
想确认当前工程到底包含了哪些路径,可以:
-
点击“魔术棒”打开 Options for Target。
-
切换到 C/C++ 选项卡。
-
查看 Include Paths 栏。这里会列出所有路径,其中就包括 Keil 自动添加的(如
C:\Keil_v5\ARM\ARMCC\include和 CMSIS 相关路径)和你手动添加的。
🔍 编译器如何查找头文件:<> 与 "" 的区别
在代码中写 #include 时,使用尖括号(<>)和双引号("")会影响编译器的查找顺序。
-
使用双引号
#include "header.h"-
优先在当前源文件所在的目录中查找。
-
若未找到,再去
Include Paths中用户指定的目录查找。 -
最后去 Keil 的系统目录(如编译器标准库路径)查找。
适用场景:常用于包含用户自己编写的、与源文件在同一目录下的头文件。
-
-
使用尖括号
#include <header.h>-
优先在 Keil 的系统目录(编译器标准库、CMSIS 等)中查找。
-
再去
Include Paths中用户指定的目录查找。 -
最后去当前源文件所在的目录查找。
适用场景:常用于包含Keil 自带的标准库或CMSIS 核心头文件。
-
最直观的体现:Build Output 窗口的编译命令
点击 Build(编译)后,在下方的 Build Output 窗口,你会看到编译器实际执行的完整命令行。自动添加的路径会以 -I(Include 参数)的形式跟在编译器指令后面。
例如,编译 main.c 时,你会看到类似这样的输出(以 ARM Compiler V6 为例):
text
"armclang.exe" -c -g -O0 -std=c11 -target-arm-none-eabi -I./RTE/_Target_1 -I"C:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.17.1\Drivers\CMSIS\Device\ST\STM32F4xx\Include" <-- 自动添加的设备头文件路径 -I"C:\Keil_v5\ARM\CMSIS\Core\Include" <-- 自动添加的CMSIS核心路径 -I"C:\Keil_v5\ARM\ARMCLANG\include" <-- 自动添加的编译器标准库路径 -I"User/Inc" <-- 你手动添加的路径 ... "main.c"
更多推荐
所有评论(0)