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?
Ich habe scons nie genutzt aber vielleicht ist eine construction Umgebung die richtige Vorgehensweise: https://scons.org/doc/production/HTML/scons-user/ch07s02.html
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:
1 | echo. >x.txt |
2 | if exist x.txt goto define_x |
3 | goto end |
4 | :define_x |
5 | echo #define CPU CPU_A >select.h |
6 | pause |
7 | del x.txt |
8 | :end |
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.
Normalerweise schaltet man mit der Variante auch das Ausgabe Verzeichnis um. wenn CPU_A in Unterverzeichnis .\CPU_A landend und CPU_B in .\CPU_B wird wirklich immer nur das das nötige neu gebaut
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.