mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mit Makefile Betriebssystem erkennen?


Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian Scheler (rosepeter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Fabian Scheler (rosepeter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ifeq(OSTYPE,linux)

ups - ich meinte natürlich

ifeq($(OSTYPE),linux)

Ciao, Fabian

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan May (smay4finger)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
elegante Loesung, danke

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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#...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder vielleicht dies:

Fehlendes Leerzeichen zwischen ifeq und (

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "missing seperator"

Fehlendes Leerzeichen zwischen ifeq und ( ?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan May (smay4finger)
Datum:

Bewertung
0 lesenswert
nicht 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

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.
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.

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