Добавить библиотеку в проект CLion

У меня есть новый проект, созданный с помощью PlatformIO в CLion. Я скопировал библиотеку Servo-1.1.8 в каталог include.

#include <Arduino.h>
#include "Servo-1.1.8/src/Servo.h"

Servo servo;

void setup() {
}

void loop() {
}

Однако я получаю ошибку компиляции:

====================[ Build | Production | uno ]================================
C:\Users\USER_NAME\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\213.5744.254\bin\cmake\win\bin\cmake.exe --build C:\Users\USER_NAME\Documents\Arduino\MultiServoCallibration\cmake-build-uno --target Production
[1/1] cmd.exe /C "cd /D C:\Users\USER_NAME\Documents\Arduino\MultiServoCallibration && platformio -c clion run -euno"
FAILED: CMakeFiles/Production C:/Users/USER_NAME/Documents/Arduino/MultiServoCallibration/cmake-build-uno/CMakeFiles/Production 
cmd.exe /C "cd /D C:\Users\USER_NAME\Documents\Arduino\MultiServoCallibration && platformio -c clion run -euno"
Processing uno (platform: atmelavr; board: uno; framework: arduino)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/uno.html
PLATFORM: Atmel AVR (3.4.0) > Arduino Uno
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 31.50KB Flash
DEBUG: Current (avr-stub) On-board (avr-stub, simavr)
PACKAGES: 
 - framework-arduino-avr 5.1.0 
 - toolchain-atmelavr 1.70300.191015 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 5 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio\build\uno\src\main.cpp.o
Linking .pio\build\uno\firmware.elf
C:\Users\USER_NAME\AppData\Local\Temp\ccmN7v6f.ltrans0.ltrans.o: In function `_GLOBAL__sub_I_servo':
<artificial>:(.text.startup+0x98): undefined reference to `Servo::Servo()'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\uno\firmware.elf] Error 1
========================== [FAILED] Took 1.18 seconds ==========================
ninja: build stopped: subcommand failed.

Я никогда раньше не использовал CMake, так что это вполне может быть что-то очень простое, например, добавление строки в какую-нибудь конфигурацию для включения этой библиотеки.

, 👍1

Обсуждение

в Servo.cpp файл не компилируется, @Juraj

@Juraj Да. Если я закомментирую строку " Servo servo;", то она компилируется. Однако без него это не очень полезно., @BanksySan


1 ответ


1

Как бы то ни было, я задал аналогичный вопрос на StackOverflow, полагая, что немного другая толпа может включать кого-то, кто использует CLion + PlatformIO для работы без Arduino и имеет более авторитетное мнение по этой теме.

Я понятия не имею, действительно ли это безопасно или хорошая идея, но как бы то ни было, я смог добавить библиотеку Arduino в свой проект, выполнив следующее:

  1. Установите PlatformIO с помощью встроенного кода VS, установите CLion, а затем настройте CLion на использование PlatformIO.
  2. Используя CLion, создайте новый PlatformIO Arduino sketch. Позвольте CLion вращать свои колеса, делать некоторые вещи, которые могли бы или не могли бы в конечном итоге иметь значение, и убедитесь, что он находится в состоянии, когда он может успешно создавать и развертывать с помощью CLion. Я лично просто вызвал Serial.start(9600) и Serial.println("что-то") для вывода в serial, а затем проверил, что это действительно работает.
  3. Выйдите из CLion и запустите VS Code. Добавьте папку, содержащую скетч, созданный на шаге 2, в его рабочую область.
  4. Используйте VS Code для добавления библиотеки. Дождитесь завершения загрузки и выйдите из VS Code.
  5. Перезапустите CLion и попробуйте использовать новую библиотеку.

Имейте в виду, я пока абсолютно не знаю, кошерно это или нет. У меня сложилось впечатление, что когда вы используете PlatformIO с CLion, 100% всего на самом деле управляется PlatformIO, и все, что делает сам CLion, - это заглушка через вызов для запуска CMake. Предполагая, что VS Code работает одинаково, теоретически это должно быть нормально... но до тех пор, пока кто-то, близко знакомый с PlatformIO и тем, как он интегрируется как с CLion, так и с VS-кодом, не убедит меня в этом, я немного нервничаю по этому поводу.

Тем не менее... если это действительно безопасно, это, вероятно, лучший способ добавить библиотеку Arduino в проект CLion-PlatformIO с тех пор (AFAIK) Сам CLion не имеет абсолютно никакой сравнимой функциональности (через плагин PlatformIO или иным образом), и я столкнулся с несколькими библиотеками для использования SSD1306 OLED, которые являются серьезной проблемой для копирования в проект вручную из их репозитория Github (потому что библиотека OLED зависит от чьей-то графической библиотеки, которая сама по себе зависимости от чужой математической библиотеки и библиотеки меню библиотека меню имеет зависимости от еще одной или двух библиотек... что ж, идея вам понятна. Боль. Точная причина, по которой такие вещи, как Gradle и Maven, существуют для Android и Java, и CMake теоретически теперь существует для C (++), хотя он все еще кажется довольно бесполезным в Arduino-land. ;-)

,