Arduino configure скрипт для условной компиляции библиотек

c++

У меня есть библиотека, использующая условную компиляцию на основе переменных препроцессора. Библиотека представляет собой отдельный объектный файл .cpp с файлом заголовка.

Как я могу передать переменные препроцессора для компиляции библиотеки? Стандартный #define в файле скетча не будет работать, так как их жизнь будет ограничена моими объектными файлами скетча, а не библиотекой.

Обычно это решается скриптом ./configure и/или пользовательским процессом make. Как я могу сделать это на Arduino?

Предоставление отдельной компиляции/исходного кода библиотеки для всех 2^8 комбинаций переключателей препроцессора не представляется возможным...

, 👍1


3 ответа


1

Существует два основных метода:

  1. Предоставьте файл config.h с параметрами, которые пользователь изменяет
  2. Поместите параметры в командную строку с помощью -D

Приличная IDE позволяет изменять командную строку компиляции, добавляя параметры.

Моя IDE, UECIDE, позволяет создавать пункты меню, которые устанавливают параметры библиотеки.

,

Объявление 1. Как сообщить библиотеке, где находится мой config.h? Когда объектный файл библиотеки компилируется, он не знает расположение пути моего проекта. Или я ошибаюсь?, @Adam Ryczkowski

config.h находится в библиотеке. В зависимости от IDE может быть возможно иметь его в папке скетча, и он найдет его там, но я не уверен, какой порядок путей включения использует Arduino IDE., @Majenko


0

Еще одно решение: переименуйте файл библиотеки .cpp в другой файл .hpp и разрешите пользователю включить его ровно в один свой объектный файл.

Пользователь должен настроить библиотеку в lib_customization.h, включаемую перед каждым #include<lib.h>. Пользователю также потребуется включить дополнительный исходный файл object_file_that_defines_lib.cpp, который включает определения библиотек.

Sketch.ino:

#include"lib_customization.h"
#include<lib.h>

void loop() {}
void setup() {}

lib_customization.h:

#define LIB_INCLUDE_FEATURE_A
#define LIB_INCLUDE_FEATURE_B

object_file_that_defines_lib.cpp:

#include"lib_customization.h"
#include<lib_definitions.h>
,

3

Проблема в том, что Arduino IDE не настроена для этого. Любая настоящая IDE имеет возможность устанавливать определения.

Если вы хотите, чтобы ваша библиотека использовалась пользователями arduino IDE, вам придется пойти по грязным маршрутам, таким как уже упомянутый подход #include и config.h. Если я не ошибаюсь, arduino IDE компилирует библиотеки с полным путем включения, поэтому файл config.h может располагаться рядом с вашим файлом sketch.ino.

Если библиотека не предназначена для пользователей Arduino IDE, я бы посоветовал использовать настоящую IDE, например, мой плагин Arduino Eclipse.

,

Я уже использую ваш превосходный плагин Eclipse. (Я протестировал несколько других IDE, но ваш опыт оказался самым лучшим). Но я бы предпочел, чтобы моя библиотека была совместима со стандартной IDE, если бы у меня был выбор. Настройка Eclipse с помощью вашего плагина заняла у меня полдня и две попытки... Не каждый сможет это сделать., @Adam Ryczkowski

Приближается V3. Это должно упростить задачу :-), @jantje