Kann ich alle .cpp-Dateien in src / zu .o's in obj / kompilieren und dann zu binary in ./?
Mein Projekt-Verzeichnis sieht wie folgt aus:
/project
Makefile
main
/src
main.cpp
foo.cpp
foo.h
bar.cpp
bar.h
/obj
main.o
foo.o
bar.o
Was ich möchte, das mein makefile zu tun wäre, um kompilieren Sie alle .cpp
Dateien in der /src
Ordner zu .o
Dateien in der /obj
Ordner, dann verknüpfen Sie alle .o
Dateien in /obj
in die output-binary in den Ordner der obersten Ebene /project
.
Habe ich neben keine Erfahrung mit Makefiles, und bin nicht wirklich sicher, was zu suchen, dies zu erreichen.
Außerdem ist das ein "guter" Weg, dies zu tun, oder ist es ein standard-Ansatz zu dem, was ich versuche zu tun?
Kommentar zu dem Problem
gnu.org/software/make/manual/make.html, Beispiel: gnu.org/software/make/manual/make.html#Simple-Makefile
@aaa: ich vermute, der OP will eine Lösung, die nicht erforderlich ist, explizit auflisten jeder Quellcode-Datei.
Ich will nicht angeben, jede source-Datei habe ich, und ich habe versucht, zu Lesen, dass die Anleitung vor, aber ich finde es unorganisiert und schwer zu verstehen. Ich Lerne viel besser, von einem tatsächlichen Beispiel, die tut, was ich erwarte, dass er funktioniert und ist gut erklärt, eher als trockene technische Handbücher.
okay. Aber machen die Dokumentation ist ausgezeichnet mit guten Beispielen (es wird nicht versuchen, technische Anleitung). Sie sind auf der Suche für Muster-Regeln: gnu.org/software/make/manual/make.html#Pattern-Rules
Das sieht ein wenig mehr wie das, was ich will. Obwohl, IMHO, die manuelle ist ein wenig trocken, wie es scheint mehr ausgerichtet auf Entwickler, die sich auf einem mittleren Niveau mit machen, und darüber hinaus ist sehr groß und in-Tiefe. Vielleicht zu viel, so.
InformationsquelleAutor der Frage Austin Hyde | 2010-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Makefile Teil der Frage
Dies ist ziemlich einfach, es sei denn, Sie brauchen nicht zu verallgemeinern
versuchen Sie so etwas wie der code unten (aber ersetzen Sie Leerzeichen Einrückung mit tabs in der Nähe von g++)
Automatische dependency graph generation
Ist ein "muss" - feature für die meisten Systeme. Mit GCC kann getan werden, in einem Durchgang als Nebeneffekt der Zusammenstellung durch hinzufügen
-MMD
Flagge zuCXXFLAGS
und-include $(OBJ_FILES:.o=.d)
am Ende der makefile Körper:Und als Jungs schon erwähnt, immer GNU Make Handbuch herum, ist es sehr hilfreich.
InformationsquelleAutor der Antwort bobah
Wildcard funktioniert bei mir auch, aber ich würde gerne geben Sie eine Anmerkung für diejenigen, die Verzeichnis-Variablen. Verwenden Sie immer den Schrägstrich für den Ordner-Baum (nicht backslash), sonst wird es scheitern:
InformationsquelleAutor der Antwort xesf