Hallo zusammen, da ich "staendig" zwischen einem Linux- und einem Windowssystem bei der AVR Programmierung hin und her springe, moechte ich gern, dass das Makefile selbststaendig erkennt, um welches Betriebssystem es sich handelt. So muss ich naemlich immer die AvrDude Optionen zum flashen neu setzen, was irgendwie nervt ... Freue mich auf eure Hinweise Sonst einen schoenen Tag
> So muss ich naemlich immer die AvrDude Optionen zum flashen neu setzen,...
Wieso? Ich würde per Makefile dafür sorgen, dass Avrdude die
Grundkonfiguration (welcher Programmer an welcher Schnittstelle hängt)
aus einer Datei liest und dann eine entsprechende Konfigurationsdatei
auf jedem System vorhalten.
Hi Stefan, ja, ist sicher eine nette Idee, aber ich hol mir eben eine Kopie des Gesamtprojekts vom SVN und moechte dass ich das ganze ohne weitere Manipulationen flashen kann. Und mit den Konfigurationsfiles waere ja auch ein neuer Eintrag noetig. Poseidonius
Hallo, auf vielen Linux-Systemen wird die Umgebungsvariable OSTYPE auf 'linux' gesetzt. Ein ifeq(OSTYPE,linux) ... endif könnte also das sein, was du suchst. Ciao, Fabian
> ifeq(OSTYPE,linux)
ups - ich meinte natürlich
ifeq($(OSTYPE),linux)
Ciao, Fabian
> ja, ist sicher eine nette Idee, aber ich hol mir eben eine Kopie des > Gesamtprojekts vom SVN und moechte dass ich das ganze ohne weitere > Manipulationen flashen kann. Und mit den Konfigurationsfiles waere ja > auch ein neuer Eintrag noetig. Ich sehe das Problem nicht. Es nimmt sich nix, ob du jedesmal in der aktuell von SVN gezogenen Kopie des Makefiles die OS-Abfrage einfügst oder beim gleichen Makefile beim Aufruf von AVRDUDE die -C Option einbaust. Und das "Einbauen" kannst du ja automatisieren, in dem du ein neues Target "burnmybaby" per cat an das von SVN gezogene Makefile anhängst oder per sed das originale Burn-Target manipulierst. > ifeq($(OSTYPE),linux) Wieder was gelernt ;-)
Ok ... jetzt muss ich nur noch ausprobieren wie das Makefile unter Windows drauf reagiert, wenn die Umgebungsvariable OSTYPE nicht bekannt ist. Beendet es die Abarbeitung oder ...? Vielen Dank Euch erstmal fuer Eure schnelle Hilfe Poseidonius
Du kannst folgendes tun: Du hast ein Makefile.linux und ein Makefile.windows. Das make rufst Du dann mit dem Parameter -f auf, unter Linux also "make -f Makefile.linux" und unter Windows "make -f Makefile.windows". Die Projektspezifischen make-Regeln packst Du dann in eine dritte Datei. mfg, Stefan.
Mein avrdude holt sich die Einstellung per Default aus dem Homeverzeichnis in ~/.avrduderc. Ich weiß nicht genau, wie es das unter Windows macht. Ich muß im Makefile nur noch den Controllertyp angeben, der Rest ist dem Projekt wurscht, weil avrdude ihn sich von außerhalb holt.
Ok, was mache ich falsch mit der ifeq Syntax? TEST = 1 test: ifeq($(TEST),1) @echo "Test ist 1" else @echo "Test ist ungleich 1" endif denn ich bekomme die Fehlermeldung: D:\...\source>make test ifeq(1,1) /usr/bin/sh: -c: line 1: syntax error near unexpected token `ifeq(1,1)' /usr/bin/sh: -c: line 1: `ifeq(1,1)' make: *** [os] Error 258 Ich arbeite mit WinAVR ... Vielen Dank für Eure Hinweise und ein schönes Wochenende
Vielleicht dies: "Extra spaces are allowed and ignored at the beginning of the conditional directive line, but a tab is not allowed. (If the line begins with a tab, it will be considered a command for a rule.)" http://www.gnu.org/software/make/manual/make.html#Conditional-Syntax
Oder vielleicht dies: Fehlendes Leerzeichen zwischen ifeq und (
sorry, wenn ich mich wie der letzte Depp anstelle ... nach dem Link von Stefan, dürfen keine Tabs eingefügt sein, also hab ich alles an den Rand gequetscht und bekomme die Fehlermeldung "missing seperator" test: ifeq($(TEST),1) @echo "Test ist 1" else @echo "Test ist ungleich 1" endif mmmh ?
> "missing seperator"
Fehlendes Leerzeichen zwischen ifeq und ( ?
Tabs müssen eingefügt werden. Es kommt zuerst eine Zeile mit Target-Name und Abhängigkeiten, dann kommt, durch einen Tab (und nur so) eingerückt das, was ausgeführt werden soll.
"Just tried a few more combinations of things. Can you believe that problem is caused by the lack of a space after "ifeq" in "ifeq(...)"???" http://www.dbforums.com/showthread.php?t=699079
> Tabs müssen eingefügt werden. Es kommt zuerst eine Zeile mit > Target-Name und Abhängigkeiten, dann kommt, durch einen Tab (und nur so) > eingerückt das, was ausgeführt werden soll. Korrekt bei Kommandos. Nicht korrekt bei Conditionals. Steht so im Manual s.o. Daher mein "Vorschlag" ifeq ($(TEST),1) <TAB>@echo "Test ist 1" else <TAB>@echo "Test ist ungleich 1" endif
Mist, jetzt müsste man Editieren können... füge noch das Target ein! test: ifeq ($(TEST),1) <TAB>@echo "Test ist 1" else <TAB>@echo "Test ist ungleich 1" endif
Mmmh, ich dachte ich hätte diese Kombination auch ausprobiert ... aber vielen Dank, jetzt tut's prima mit der OS Unterscheidung und wenn es jemanden interessiert: AVRDUDE = avrdude ifeq ($(OSTYPE),linux) AVRDUDE_FLAGS = -P /dev/parport0 else AVRDUDE_FLAGS = -P lpt1 endif AVRDUDE_FLAGS += -v ... Schönes Wochenende
Ah, jetzt verstehe ich worauf Du hinaus willst. Du solltest in Deine avrdude.rc die Zeile default_parallel = "/dev/parport0" bzw. in Windows default_parallel = "lpt1" einfügen. Das ist wesentlich besser, als das in das Makefile zu packen. Auf einem anderen Rechner stimmt das sonst wieder nicht und Du müsstest das Makefile anpassen. Also raus mit dem Kram! mfg, Stefan.
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.