Makefile Variablen vs Header

OP Persönliche Seite #5015438
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
Gast #5015463
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.