Neue C dependencies

Gast #78022
Hallo,
hat sich schon mal jemand mit den neuen C dependencies beschäftigt?
Wie unter WinAVR/sample im makefile beschrieben und in mfile
verwendet.
Ich habe das ganze einmal ausprobiert und läuft auch.
Allerdings habe ich einige Tücken:

a) die dependencies werden nur beim Kompilerlauf erzeugt, haben also
keine eigenen Abhängigkeiten. Sie werden nach einem löschen also nicht
neu erstellt.

b) Kann ich die dependencies in ein völlig anderes Verzeichnis als
meinen Quellcode bekommen. z.B C:/obj/.dep und den Quellcode in C:/scr

c) Sollte das ganze auch davon Abhängig sein, das die ganzen object
files auch im Quellcode Verzeichnis liegen? Die object files sollten im
Verzeichniss C:/obj liegen.

d) Wie kann das ganze funktionieren, wenn sich die Quellcodedateien für
ein Projekt in unterschiedlichen Verzeichnissen befinden.

Ansonsten scheint mir die Variante mit sed "übersichtlicher". Die
Parameter sind zwar ein Hammer, aber man hat klare Ein- und
Ausgangsdateien.

Evtl. hat ja jemand einen kurzen Konzeptbericht. Ich kann nicht
nachvollziehen, was bei GENDEPFLAGS =
-Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d
passieren soll.

Ich weiss, es zwingt mich ja niemand, auf sed zu verzichten. Aber ich
habe mich nun mal mit einem anderen Ansatz beschäftig. Diesen möchte
ich dann auch so einigermassen verstehen. Was an hinterher einsetzt ist
eine ganz andere Frage.

Oryx
Wieviele Millionen Quelltextzeilen hast Du denn so, daß es sich lohnt
Abhängigkeiten aufzustellen ?

Ich kompiliere immer alles komplett neu:

avr-gcc.exe *.c

und brauchte mich daher noch nie mit "make", "sed" usw. zu
beschäftigen.


Peter
Gast
Wenn's Dir Spaß macht, kannst Du doch gern die sed-Variante benutzen.
Die Variante über den GCC-Automatismus war wohl von Eric als
``plug&play'' Winuser-tauglich gedacht (d. h. er hatte sie aus der
gccembedded Mailingliste, glaube ich).  Man kann das sicher noch
tunen, aber eigentlich ist mir die Mimik schon zu verwurschtelt, als
daß ich mir das antun würde. ;-)

Wenn Du von Mfile die Unix-Variante benutzt (die sich ja nur im
makefile_template unterscheidet), bekommst Du etwas, was weniger
``plug & play & hope it works'' ist, sondern mehr benutzergesteuert.
Erstens hast Du paar Gimmicks in Form irgendwelcher überflüssiger
Ausschriften nicht mehr drin, die eigentlich nur ein altes AVR Studio
3 gebraucht hat, weil sie zu faul waren, den exit status von `make'
richtig zu testen und stattdessen irgendwelche magic strings
verglichen haben.

Zweitens werden bestimmte Dinge wie die Ausgabe der Programmgröße
nicht mehr vorgenommen (wofür auch? wenn ich das brauche, kann ich ja
``avr-size -A ...'' selbst eintippen).

Schließlich gibt's keine automatischen Abhängigkeiten mehr, sondern
stattdessen ``the Unix way'': wenn die Abhängigkeiten neu erstellt
werden sollen, tippt man `make depend' ein, und dann werden diese
einfach ans Makefile hinten drangehängt (ggf. dort existierende werden
zuvor gelöscht).  Typischerweise weiß ich als Autor am besten, wann
ich das wirklich brauche und wann nicht (oder ob ich gar keine
dependencies erst brauche, sondern `make clean all' eintippen kann,
um
einfach alles neu zu bauen).
Gast
Hallo,
@Peter:
Sei dankbar!
Ich habe:
100 Dateien /ohne H-Dateien
5 Verzeichnisse
3 verschiedene Controller
1 PC/Windows
7 Projekte, die teilweise den gleichen Quellcode nutzen
Kompilierzeit ca. 3 Minuten, beim grössten Projekt
Soweit zum Thema, macht make Sinn.

@Jörg
Vielen Dank für deine Ausführung.
Der Ausdruck "verwurschtelt" ist wohl treffend. Ich werde bei meiner
sed-Lösung bleiben.

Oryx
@Oryx,

"Kompilierzeit ca. 3 Minuten, beim grössten Projekt"

Mein größtes Projekt auf einem MC hatte bisher nur 27 C-Files (10.000
Zeilen) und braucht komplett 12s (1.2GHZ PC).
Deshalb hatte ich noch nie das Bedürfnis daran was zu optimieren.

Ich kenne allerding unsere Windows C++ Programierer, die immer viel
rauchen und Kaffee trinken, die erzählen dann was von 30min und
länger.


Peter
Gast
Visualklickplusplus. :-)

C++ braucht aber in der Tat u. U. deutlich länger zum Compilieren,
auch einen GCC kann man damit gut ins Schwitzen bekommen. ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.