Forum: Compiler & IDEs Iteratives bauen für Projekt mit precompile switches?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Name G. (name_g)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe eine Plattform gebaut, die zwei Controller gleichzeitig 
unterstützt. Abhängig von precompiler switches wird der Hardwarezugriff 
für den einen oder anderen Controller ausgerichtet.

Beispiel:
// Compileraufruf
gcc ... -D FS_CONTROLLER_A = STD_ON

// im code
#if FS_CONTROLLER_A == STD_ON
int8_t accessPin = 0;
#else
int8_t accessPin = 1;
#endif

Das ganze funktioniert insgesamt sehr gut und erspart mir einen haufen 
Arbeit.
Leider funktioniert das iterative bauen mit meiner Buildumgebung sCons 
nicht.
Baue ich mehrfach hintereinander für den gleichen Controller, ist alles 
gut. Wechsel ich den Controller durch Änderung des gcc Befehls, kriegt 
sCons davon nichts mit.
Um zu entscheiden, ob ein Object neu gebaut werden muss, führt sCons 
lediglich einen MD5 Checksummenvergleich durch. Bevor der Precompiler 
über die Quelldateien läuft sieht natürlich alles unverändert aus.
sCons bietet hier noch weitere Decider, die teilen allerdings alle das 
Problem.
Einige IDE's bringen dieses Feature mit, zb die Keil Ide von Arm. Ich 
würde aber gerne weiterhin eine eigenen Buildumgebung nutzen.
Bin ich dazu verdammt, einen eigenen custom Decider für sCons zu 
programmieren oder gibt es hier eine vorgefertigte Lösung?
Bringt make/cmake diese Funktionalität nativ mit?
Gibt es für sCons hier bereits eine fertige Lösung?

von physicist (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe scons nie genutzt aber vielleicht ist eine construction 
Umgebung die richtige Vorgehensweise:
https://scons.org/doc/production/HTML/scons-user/ch07s02.html

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Ich mache sowas gerne über Batches.
Z.B. man schreibt compile_A.bat und compile_B.bat
Die Dateien prüfen, ob eine passende Datei A.txt bzw. B.txt existiert.
Wenn nicht, wird sie angelegt und "make clean" aufgerufen, sonst nur 
"make".
Und die nicht passende x.txt wird gelöscht.
Hier mal das Prinzip:
echo. >x.txt
if exist x.txt goto define_x
goto end
:define_x
echo #define CPU CPU_A >select.h
pause
del x.txt
:end

von Tarif A. (tarifarbeiter)


Bewertung
0 lesenswert
nicht lesenswert
Klar, in scons geht sowas natürlich.
Es ist ja genau wie Make, nur halt eben in Python.
Du kannst im scons die Compiler deines festlegen etc...

Ich persönlich finde aber waf.io besser als scons, wenn es darauf 
ankommt ein Python basiertes Make zu haben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.