Arduino Build-Parameter
Es gibt Arduino-Projekte, bei denen wir das Ergebnis des Software-Builds in verschiedenen Varianten erstellen wollen.
An dieser Stelle wird beschrieben, wie eine solche Varianten-Unterscheidung mittels Pre-Processor Macros über den C++-Compiler der Arduino-Entwicklungsumgebung erreichen können.
Dies hat den Vorteil, dass bei unterschiedlichen Varianten des Einsatzes einer Arduino-Library nicht (wie z.B. bei der TFT_eSPI von Bodmer) der Library-Source-Code für jede Variante verändert werden muss (Diese Methode hätte den Nachteil, dass die Library dann nicht ohne Probleme in mehreren Sketches, die unterschiedliche Konfigurationen der Library erfordern, eingesetzt werden kann).
Die hier beschriebene Methode wird in der ATERM-Library von PUCON eingesetzt.
Es muss nun dafür gesorgt werden, dass zur Compile-Zeit sowohl des Sketches als auch der Library die Preprocessor-Macro(s), die die Varianten beschreiben, nicht in einer Quelldatei, sondern schon beim Aufruf des Compilers (genauer gesagt des Pre-Processors), auf den/die Wert/e für die konkrete Variante gesetzt ist/sind.
In der ATERM-Library ist das per Mai 2026 EIN Preprocessor-Macro mit dem Namen ATERM_CONFIG_PROFILE, das auf den eindeutigen Namen einer der von ATERM unterstützten Varianten gesetzt werden muss
Dies kann damit erreicht werden, dass auf jeder C++-Compiler-Kommandozeile (zumeist GCC) eine Option der Form -D<<macroname>>=<<macrowert>> angegeben wird.
Man benötigt daher:
- einen Weg, in der Arduino-IDE einen Wert <<macrowert>> durch den Benutzer der IDE angeben zu können
- einen Weg, damit die Arduino-IDE beim Build dann dem Compiler die Option -D<<macroname>>=<<macrowert>> mitgibt.
Per Mai 2026 und der Arduino-IDE Version 2.3.5 mit Arduino-CLI 1.2.0 (mit diesen Versionen wurde die Methode getestet) sind dazu folgende Schritte nötig: ( Arduino beschriebt dies unter https://arduino.github.io/arduino-cli/dev/platform-specification/#custom-board-options)
- Erweiterung der Arduino-IDE, um im "Tools" Menu eine zusätzliche Option <<optionsname>> hinzuzufügen, mit einer Liste von Werten, aus der ausgewählt werden kann:
- Diese Erweiterung muss für jede Plattform, die in C:\Benutzer\<<Benutzername>>\AppData\Local\Arduino15\packages installiert ist, vorgenommen werden
- in der Datei <<packagename>>\hardware\<<packagename>>\<<versionsnummer>>\boards.txt:
- Eine Zeile
menu.<<optionsname>>=<<Menü-Anzeigetext>>- Beispiel für die Option "configProfile":
menu.configProfile=ATerm Configuration Profile
- Beispiel für die Option "configProfile":
- in jedem Abschnitt für jedes Board:
- für jeden möglichen Wert der Option <<optionsname>> die folgenden Zeilen:
- <<boardname>>.menu.<<optionsname>>.<<optionsid>>=<<optionswert>>
- <<optionswert>> ist der Wert, der in der Werteliste für <<optionsname>> angezeigt wird
- für jede <<optionsid>> können eine oder mehrere Zeilen mit Werten für Parameter, die bei Auswahl des Wertes verwendet werden sollen, angegeben werden
- <<boardname>>.menu.<<optionsname>>.<<optionsid>>.<<parameterkennung>>=<<parameterwert>>
- Beispiel: esp32devmod.menu.configProfile.esp32cyd.configprofileflags=-DATERM_CONFIG_PROFILE=ESP32CYD
- Bedeutung/Erklärung: wird im Menü "ATerm Config Profile" die Option "ESP32CYD" ausgewählt, so wird der Buikd-Parameter "configprofileflags" auf den Wert "-DATERM_CONFIG_PROFILE=ESP32CYD" gesetzt
- (zu ergänzen)
- <<boardname>>.menu.<<optionsname>>.<<optionsid>>=<<optionswert>>
- für jeden möglichen Wert der Option <<optionsname>> die folgenden Zeilen:
- Eine Zeile
- (zu ergänzen)
- Erweiterung der Arduino-IDE, um beim Aufruf des Compilers die Option -d<<macroname>>=<<macrowert>> in die Kommandozeile aufzunehmen