Arduino 自带一个很好的IDE,但是毕竟还是 JB 家的产品顺手,于是还真的在github上看到这个东西。

插件:https://github.com/vsch/CLionArduinoPlugin

原项目:https://github.com/francoiscampbell/arduino-cmake

起因

插件安装很简单,但是无法在我的机器上找到 Arduino SDK,后来在示例程序中看到了 Arduino.h 这个不存在的引用。我猜测这个文件就是所谓的 Arduino SDK ,又上 github 搜了一圈,也没看到文件在哪里。后来在插件项目的README中链接到的原项目 的README中找到了答案。

不存在 .h 引用

在原项目中找到对于编译器的说明

猜测

于是猜想文件其实就在 Arduino IDE 的包里,既然IDE我有装那么理论上就不会有这个问题,那么只有从 cmake 下手了,看它是从哪里寻找的 Arduino SDK ,修正应该就好了 。

异常信息

异常定义

证实

  • cmake/ArduinoToolchain.cmake

    最初看的这个文件,但是这个文件其实只提供了一个 ARDUINO_SDK_PATH 常量,看起来也没问题。

  • cmake/Platform/Arduino.cmake

    经过查询 cmake 语法,得知 if(ARDUINO_SDK_VERSION VERSION_LESS 0.19) 的意思是 如果变量的版本小于 0.19,又得知 cmake 设置变量使用 set( 名字 参数 值) , 那么接下来就需要寻找定义处了。

我不太懂 cmake 的语法,这几句看起来像是 detect_arduino_version 在为常量赋值,而后使用 set() 把常量值赋值给判断用的变量,有点类似 c 的指针引用的意思。

果然有一个名为 detect_arduino_version 的方法定义,其作用大致为从路径里读取一个值,而后赋值给 RAW_VERSION 最后使用正则取出数字版本号。

通过 message("${ARDUINO_VERSION_PATH}") 得到了文件路径为/Applications/Arduino.app/Contents/Java/lib/version.txt

调出clion的终端查看文件

震惊,原因居然是我的IDE为每夜构建版,版本号不是数字。

解决方案

  1. 安装稳定版 Arduino IDE

  2. 删除版本判断

  3. 修改 version.txt 内容为最新版本号 19.0
    echo "19.00" > /Applications/Arduino.app/Contents/Java/lib/version.txt

  4. 手动赋值为 19.0

大功告成