最近因为一门实训课程的缘故接触了 Arduino 开发。由于有一定的 C++ 基础,所以还是很快上手了 Arduino 提供的开发环境,简单说来就是一个 C++ 工程,所谓的“Sketch”(.ino文件)其实就是 C++ 源代码。然而其中有一点令我很困惑,并最终导致了问题的产生: Arduino IDE 是如何处理源代码中的头文件引用并最终链接整个程序的?

这个问题听上去根本不是问题:不就是和一般的 C++ 一样使用 #include 预编译指令么?顶多最终链接的时候 IDE 做一些自动处理,把用到的模块都链接起来。但如果你用过 Arduino 的 library ,你就会发现它的使用方法不符合 C++ 的规则:库是存放在 library 目录下的一个个子文件夹中的,而使用的时候却是直接 #include 某个头文件,没有指明库文件夹的名字( C++ 的头文件引用是不会递归搜索的)。

Read More