Mit Makefile Betriebssystem erkennen?

Gast #498712
Lesenswert?
• ▲
▼
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
Gast #498722
Lesenswert?
• ▲
▼
> 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.
Gast #498733
Lesenswert?
• ▲
▼
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
Gast #498755
Lesenswert?
• ▲
▼
> 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 ;-)
Gast #498769
Lesenswert?
• ▲
▼
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
Gast #498822
Lesenswert?
• ▲
▼
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.
Gast #498948
Lesenswert?
• ▲
▼
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.
Gast #499466
Lesenswert?
• ▲
▼
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
Gast #499514
Lesenswert?
• ▲
▼
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 ?
Gast #499545
Lesenswert?
• ▲
▼
> 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
Gast #499582
Lesenswert?
• ▲
▼
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
Gast #500161
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.