www.mikrocontroller.net

Forum: Compiler & IDEs Compiler-flag abhängiges #include


Autor: Regler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende ein Compilerflag

--combine -fwhole-program

welches neben dem Einbinden externer header auch das Einbinden externer 
c-Files mit #include erfordert, wenn man nicht alles in eine Datei 
kopieren möchte.

Gibts es Möglichkeiten, das flag per #ifdef abzufragen?

Oder anders gefragt, wie realisiert man einen modularen und trotzdem 
immer kompilierbaren Programmaufbau, wenn man dieses Flag nur eventuell 
verwendet, ohne ständiges Editieren? Gar nicht?

Wäre zwar nicht soo schlimm, falls nicht. Erfordert dann halt ein paar 
Kommentare mehr. Wollte nur mal wissen ob sowas überhaupt geht. Man 
könnte so auch falsche Einstellungen der Compiler-Flags abfangen und per 
#error darauf hinweisen.

: Verschoben durch Moderator
Autor: Simulant (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach halt ein zweites C-File, das NUR aus includes besteht.

Ohne Flag kompilierst du wie bisher, Mit dagegen nur das neue File.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Regler schrieb:
> Ich verwende ein Compilerflag
>
> --combine -fwhole-program

Also wohl gcc, oder?

> welches neben dem Einbinden externer header auch das Einbinden externer
> c-Files mit #include erfordert, wenn man nicht alles in eine Datei
> kopieren möchte.

Nein. Du kannst auch einfach alle C-Files in der Kommandozeile angeben. 
Wozu hast du sonst das --combine mit drin? Bei deiner Lösung (per 
#include oder nur eine C-Datei) brauchst du es doch gar nicht.

Autor: Regler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simulant schrieb:
> mach halt ein zweites C-File, das NUR aus includes besteht.
>
> Ohne Flag kompilierst du wie bisher, Mit dagegen nur das neue File.

Eine Möglichkeit an die ich auch schon dachte. Elegant finde ich es 
trotzdem nicht. Da setze ich doch lieber im Quellcode ein paar 
Kommentare.

Stefan Ernst schrieb:
> Bei deiner Lösung (per
> #include oder nur eine C-Datei) brauchst du es doch gar nicht.

Erstmal: Kenne mich mit Kompilerflags und deren Nutzung nicht so gut 
aus, da ich mich erst seit kurzem damit beschäftige(n muss).

--combine hat nichts mit -fwhole-program zu tun?

Autor: Regler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja: AVR-GCC

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Regler schrieb:

> --combine hat nichts mit -fwhole-program zu tun?

Nein, davon abgesehen, dass man sie häufig zusammen benutzt.

gcc --combine a.c b.c
bedeutet nichts anderes, als "nimm die beiden C-Dateien und jage sie 
zusammen durch den Compiler, so als ob es nur eine C-Datei wäre".

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst schrieb:
> bedeutet nichts anderes, als "nimm die beiden C-Dateien und jage sie
> zusammen durch den Compiler, so als ob es nur eine C-Datei wäre".

Jein.  Nur hinsichtlich interner Analysen (also bezüglich der
Optimierungsstragie).  Hinsichtlich der Sprach-Syntax bleiben es zwei
getrennte Übersetzungseinheiten (translation units), d. h. für
"static" haben sie beide nach wie vor jeweils ihren eigenen
Namensraum.  (Das wäre übrigens auch der wesentliche Unterschied zum
#include der C-Dateien ineinander, dort wäre alles zusammen nur eine
Übersetzungseinheit.)

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.