Forum: Mikrocontroller und Digitale Elektronik Makefile Variablen vs Header


von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Hi,

ich passe gerade eine Timer2 Routinge/Init an, damit sie vom 
ursprünglichen Atmega168/88 (Aus dem Netzt, ich glaube sogar hier aus 
dem Forum) für meinen Atmega16 passt.

Dabei erwartet die timer2.c eine Variable namens
1
IRQS
Die nicht im Code definiert wurde.
Irgendwo in einem Kommentar konnte ich dann den Hinweis finden

1
//IRQS wird im Makefile definiert.

Jetzt die eigentliche Frage: Wieso?
Ich für meinen Teil hätte in der timer2.h ein

1
#define IRQS 5000

gesetzt.
Wo genau ist der Unterschied bzw. ggf. der Vorteil dies über das 
Makefile zu tun?

Grüße Oekel

von Oliver S. (oliverso)


Lesenswert?

Wer die Konfiguration komplett im makefile machen möchte, kann das so 
machen.

Oliver

von A. B. (Gast)


Lesenswert?

Wenn das im Header definiert wird, muss man bei jeder Änderung den Code 
anfassen. Will man gar mehrere "Varianten" gleichzeitig pflegen, ist das 
mehr als umständlich.

Im Makefile kann man z. B. problemlos verschiedene targets anlegen, die 
unterschiedliche Makro-Definitionen beinhalten. So bekommt man aus einer 
Code-Version unterschiedliche builds.

Klassischer Fall: debug und release build. Oder unterschiedliche 
Zielsysteme. Wär doch z. B. besonders schön, wenn hinterher der Code für 
den 168 und den 16 aus derselben(!) Code-Basis einfach durch ein "make 
atmega168" oder "make atmega16" oder "make ARCH=atmega???" erzeugt 
werden könnte?!

Generell sind dann im Makefile aber nur die "Oberbegriffe" festgelegt, 
während im eigentliche Code dann die Sonderbehandlungen der einzelnen 
Fälle über bedingte Präprozessor-Anweisungen im Detail behandelt werden.

Die Variablen aus dem Makefile müssen dem Compiler beim Aufruf im 
Makefile explizit mitgeteilt werden mit "-Dmakro=value" oder so. Danach 
ist's dem Compiler bzw. genauer dem Präprozessor egal, wo die Makros 
definiert wurden.

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
Noch kein Account? Hier anmelden.