我在 freebsd 下使用。arduino IDE 下正常,emacs arduino-mode 就有以下这个问题:
#include </usr/local/arduino/libraries/Wire/Wire.h>
#include语句要写绝对路径,不然就报错。`
bsd.arduino.mk文件中已经有
PREFIX?= /usr/local
ARDUINO_PREFIX?= ${PREFIX}
ARDUINO_DIR?= ${ARDUINO_PREFIX}/arduino
ARDUINO_LIBRARIES_DIR?= ${ARDUINO_DIR}/libraries
sketch目录下的Makefile文件内容:
TARGET= light6
ARDUINO_BOARD= uno
ARDUINO_MK_DIR= /usr/local/arduino-bsd-mk
MAKEOBJDIRPREFIX= /usr/obj
AVRDUDE_PORT= /dev/cuaU0
.include "${ARDUINO_MK_DIR}/bsd.arduino.mk"
为什么第一个想法是到社区来发帖子,而不是去GitHub上给项目提issue?
1 个赞
github 看不懂。stardiviner 也有 arduino-mode 项目,能帮我吗?
这个项目就是我在维护。。。。。
你不到github上面提,这里用arduino-mode的人又少。
万一我不是在这个社区里。不就没人回复你。
你只是运气好,恰好我是维护者。
这个是arduino命令行工具的问题。你要自己指定include目录。
arduino-mode 里面的 flycheck-arduino
其实代码很简单。就是调用命令。
(flycheck-define-checker arduino
;; https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc
"Arduino checker using Arduino IDE. (This requires higher than version 1.5+)"
;; source, source-inplace, source-original
:command ("arduino" "--verify" source-original)
:error-patterns
(;; I don't make sure about this warning... How to emit a warning?
(warning line-start (file-name) ":" line ":" column ": warning: " (message) line-end)
(error line-start (file-name) ":" line ":" column ": " (0+ "fatal ") "error: " (message) line-end))
:modes (arduino-mode))
验证一个源代码文件比如标准例子 Blink.ino
arduino --verify Blink.ino
Picked up JAVA_TOOL_OPTIONS:
Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
Blink:25:10: fatal error: ArduinoCloudThing/src/ArduinoCloudThing.h: No such file or directory
25 | #include <ArduinoCloudThing/src/ArduinoCloudThing.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
我测试了一下,Emacs里面flycheck竟然是正常的,没报错。难道我arduino做了什么设置么?太久了忘记了。
问题解法原来是 Makefile 少了一行,比如源文件中有 include <Wire.h> 句子,则 Makefile 文件中要有 ARDUINO_LIBS= Wire
ARDUINO_LIBS= Wire
有多个LIBS时使用空格分隔。同时 /usr/local/arduino/libraries/XXX 要更名。
如我下载了一个“USB_Host_Shield_Library_2_0-1.5.0”,里面有个 PS4USB.h 文件,当我代码里使用了 #include <PS4USB.h> 时,需要把
/usr/local/arduino/libraries/USB_Host_Shield_Library_2_0-1.5.0
目录更名为
/usr/local/arduino/libraries/PS4USB