首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino makefile无法编译

Arduino makefile无法编译
EN

Stack Overflow用户
提问于 2017-08-10 08:35:44
回答 1查看 533关注 0票数 1

我正在尝试用Makefile编译我的Arduino文件/项目。但我对全局变量有问题。上面说没有申报。我下载的makefile来自github:https://github.com/sudar/Arduino-Makefile

因为我对阿迪诺没有经验,所以我看不出有什么问题。

我的错误代码:

代码语言:javascript
复制
    -------------------------
    Arduino.mk Configuration:
    - [AUTODETECTED] CURRENT_OS = LINUX
    - [COMPUTED] ARDMK_DIR = /usr/share/arduino (relative to Common.mk)
    - [USER] ARDUINO_DIR = /usr/share/arduino
    - [AUTODETECTED] ARDUINO_VERSION = 105
    - [DEFAULT] ARDUINO_SKETCHBOOK = /sketchbook
    - [BUNDLED] AVR_TOOLS_DIR = /usr/share/arduino/hardware/tools/avr (in Arduino distribution)
    - [COMPUTED] ARDUINO_LIB_PATH = /usr/share/arduino/libraries (from ARDUINO_DIR)
    - [DEFAULT] ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino/cores/arduino
    - [COMPUTED] ARDUINO_VAR_PATH = /usr/share/arduino/hardware/arduino/variants (from ARDUINO_DIR)
    - [COMPUTED] BOARDS_TXT = /usr/share/arduino/hardware/arduino/boards.txt (from ARDUINO_DIR)
    - [DEFAULT] USER_LIB_PATH = /sketchbook/libraries (in user sketchbook)
    - [USER] BOARD_TAG = uno
    - [COMPUTED] OBJDIR = build-uno (from BOARD_TAG)
    - [ASSUMED] MONITOR_BAUDRATE = 9600
    - [DEFAULT] OPTIMIZATION_LEVEL = s
    - [DEFAULT] MCU_FLAG_NAME = mmcu
    - [DEFAULT] CFLAGS_STD = -std=gnu99
    - [AUTODETECTED] Size utility: AVR-aware for enhanced output
    -
    - ARDUINO_LIBS =
    - [SYSTEM] Wire
    - [SYSTEM] EEPROM
    - [SYSTEM] Esplora
    - [SYSTEM] Ethernet
    - [SYSTEM] Firmata
    - [SYSTEM] GSM
    - [SYSTEM] LiquidCrystal
    - [SYSTEM] Robot_Control
    - [SYSTEM] Robot_Motor
    - [SYSTEM] SD
    - [SYSTEM] Servo
    - [SYSTEM] SoftwareSerial
    - [SYSTEM] SPI
    - [SYSTEM] Stepper
    - [SYSTEM] TFT
    - [SYSTEM] WiFi
    - [SYSTEM] Wire
    - [SYSTEM] Wire/utility
    - [SYSTEM] Ethernet/utility
    - [SYSTEM] Robot_Control/utility
    - [SYSTEM] SD/utility
    - [SYSTEM] TFT/utility
    - [SYSTEM] WiFi/utility
    - [SYSTEM] Wire/utility
    - [COMPUTED] BOOTLOADER_PARENT = /usr/share/arduino/hardware/arduino/bootloaders (from ARDUINO_DIR)
    -------------------------
    /usr/share/arduino/hardware/tools/avr/bin/avr-g++ -MMD -c -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=105 -I. -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard -I/usr/share/arduino/libraries/Wire -I/usr/share/arduino/libraries/EEPROM -I/usr/share/arduino/libraries/Esplora -I/usr/share/arduino/libraries/Ethernet -I/usr/share/arduino/libraries/Firmata -I/usr/share/arduino/libraries/GSM -I/usr/share/arduino/libraries/LiquidCrystal -I/usr/share/arduino/libraries/Robot_Control -I/usr/share/arduino/libraries/Robot_Motor -I/usr/share/arduino/libraries/SD -I/usr/share/arduino/libraries/Servo -I/usr/share/arduino/libraries/SoftwareSerial -I/usr/share/arduino/libraries/SPI -I/usr/share/arduino/libraries/Stepper -I/usr/share/arduino/libraries/TFT -I/usr/share/arduino/libraries/WiFi -I/usr/share/arduino/libraries/Wire -I/usr/share/arduino/libraries/Wire/utility -I/usr/share/arduino/libraries/Ethernet/utility -I/usr/share/arduino/libraries/Robot_Control/utility -I/usr/share/arduino/libraries/SD/utility -I/usr/share/arduino/libraries/TFT/utility -I/usr/share/arduino/libraries/WiFi/utility -I/usr/share/arduino/libraries/Wire/utility -Wall -ffunction-sections -fdata-sections -Os -fno-exceptions main.cpp -o build-uno/main.o
    main.cpp: In function 'void setup()':
    main.cpp:17:16: error: 'OUTPUT' was not declared in this scope
    pinMode(led, OUTPUT);
    ^
    main.cpp:17:22: error: 'pinMode' was not declared in this scope
    pinMode(led, OUTPUT);
    ^
    main.cpp: In function 'void loop()':
    main.cpp:23:30: error: 'analogWrite' was not declared in this scope
    analogWrite(led, brightness);
    ^
    main.cpp:33:11: error: 'delay' was not declared in this scope
    delay(30);
    ^
    make: *** [build-uno/main.o] Error 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 15:23:10

Arduino IDE做了一些Arduino-Makefile不做的“草图预处理”(参见https://github.com/arduino/arduino-preprocessor#about-the-arduino-sketch-ino-preprocessing)。换句话说,Arduino IDE在尝试编译它之前修改您的sketch.ino以将其转换为C++,而Arduino-Makefile则尝试编译它而不做任何更改。

因此,Arduino-Makefile无法编译一些使用Arduino IDE编译得很好的草图。手工执行这些操作通常有三个步骤:

  1. 有很多源文件吗?如果是,将它们合并到一个文件中。
  2. #include <Arduino.h>是否位于单个源文件的顶部?如果没有,就加进去。
  3. 所有函数在使用前都声明好了吗?如果没有,则添加前向声明。

在您的示例中,似乎需要步骤2(缺少的变量OUTPUT和编译错误消息中的缺失函数是在Arduino.h中声明的,参见https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Arduino.h)。

如果您打算继续使用Arduino-Makefile,我建议您习惯这些类型的错误,因为您将在网络上找到的大多数草图都只使用Arduino IDE进行测试。好的一面是,将它们转换为C++通常是微不足道的,而且很少花费时间,因为Arduino草图很少“大”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45608482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档