Dieser Tage hab ich einem AVR-GCC Projekt die SD-Card Library von Holger Klabunde hinzugefügt. Mein Problem#1: ich hab mich bisher mit C nur in der GUI beschäftigt, um die Verwendung von make hab ich mich bisher erfolgreich gedrückt. Bei Holger Klabundes Library hatte ich erstmals das Problem am Hals, eine Library bestehend aus vielen Dateien irgendwie einzusortieren. Die Lösung des Problems hab ich irgendwann begriffen: ich musste zumindest alle .c Dateien ins Projekt einbinden damit sie kompiliert werden, also in Objekt-Dateien übersetzt werden die der Linker nachher vorliegen haben möchte um seine Aerbeit tun zu können. Mein Problem#2: hauptsächlich zum Zweck des Debugging werden in der Holger-Klabunde-Library einige weitere Komponenten (LCD, serielle Schnittstelle...) eingebunden, die man nicht unbedingt benötigt sofern alles klappt. Dieses zweite Problem war eigentlich mein Hauptproblem, da ich in meinem Projekt bereits andere LCD und serial Bibliotheken drin hatte. Die Frage die nun im Laufe dieser Experimente für mich aufgetreten ist: Müssen optionale Komponenten unbedingt vorhanden sein? Mit solchen Konstrukten: #ifdef BLA C-Quelltext #endif mault mein System, wenn der Code innerhalb der Preprozessor-Bedingung nicht vorhanden ist - auch wenn die Bedingung nicht zutrifft. Gibts irgendwie eine Projekt-Option, dass auf das Vorhandensein von nicht einzubindendem Code verzichtet wird? Wär im Fall der Klabunde Library sehr nützlich, weil ich dann jede Menge Quelltext-Dateien die sicher nicht benötigt werden einfach weglassen kann.
Micha schrieb: > #ifdef BLA > C-Quelltext > #endif > > mault mein System, wenn der Code innerhalb der Preprozessor-Bedingung > nicht vorhanden ist - auch wenn die Bedingung nicht zutrifft. Bei einem #ifdef gehts nicht darum, ob eine Bedingung zutrifft oder nicht. Es geht darum, ob ein Makro existiert oder nicht. Wenn du also auf Code stösst
1 | #ifdef USE_LCD
|
2 | lcd_init(); |
3 | #endif
|
dann suchst du dir die Definition von USE_LCD, die wahrscheinlich in irgendeinem Header File steht oder am Anfang der C-Datei. wenn dort steht
1 | #define USE_LCD 1
|
dann ist die Aktion, die zu einem #ifdef passt, nicht das so zu ändern
1 | #define USE_LCD 0
|
sondern schlicht und ergreifend das Makro auszukommentieren
1 | // #define USE_LCD 1
|
kein makro, der #ifdef schlägt fehl und das was zwischen #ifdef und #endif steht, wird nicht mitcompiliert, wenn der Code mittels #ifdef geklammert wurde und das Makro nicht existiert. > Gibts irgendwie eine Projekt-Option, dass auf das Vorhandensein von > nicht einzubindendem Code verzichtet wird? Der wird sowieso nicht mitcompiliert. Allenfalls hat der Autor vielleicht irgendwo einen Fehler gemacht und Dinge nicht mittels #ifdef geklammert, weil er zur Kontrolle vor der Code-Freigabe das nicht getestet hat. Kommt immer wieder mal vor und ist kein Beinbruch: dann ergänzt man halt die #ifdef Klammerung bzw. korrigiert den Code entsprechend. Aus dem Zusammenhang an der betreffenden Codestelle sollte sich eigentlich in jedem Fall recht schnell ergeben, wie vorzugehen ist. > Wär im Fall der Klabunde Library sehr nützlich, weil ich dann jede Menge > Quelltext-Dateien die sicher nicht benötigt werden einfach weglassen > kann. Die lcd-Funktionen bzw. das File in dem die lcd Funktionen (hoffentlich) gesammelt sind, schmeisst du dann einfach aus dem Projekt raus. Soviele Files werden das schon nicht sein. Der hat ja sicher nicht alle C-Files zum Zip File dazugepackt, die er auf seinem Rechner finden konnte. Als Programmierer muss man auch schon mal ein wenig selbst manuell arbeiten. So ist das nun mal. Wenn du das nicht willst, dann musst du BWL-er werden. Für die reichts, wenn sie Maus-schubsen können und die Nummer von der Hotline parat haben. Aber an einen Software Entwickler werden höhere Anforderungen gestellt. PS: "mault mein System" ist keine sinnvolle Fehlermeldung. Der Compiler schreibt wohl kaum "maul" hin. Da steht eine Fehlermeldung, die in geschätzten 80% aller Fälle direkt zu einer naheliegenden Korrektur führt.
:
Bearbeitet durch User
Hm, du hast deine Probleme doch schon erkannt. Make ist keine Zauberei. Dazu gibt es Bücher und Anleitungen im Netz. Ein ordentlicher Programmierer sollte make schon verstehen. #ifdef's sind auch keine Zauberei. Dazu gibt es Bücher und Anleitungen im Netz. ... Also eine Runde zurück, die Basics lernen, und sich erst dann an die Aufgaben setzen.
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.