Ich sah Flussdiagramm zu verstehen, wie Makefiles wirklich funktionieren, aber ich bin immer noch zu 100% zu kämpfen, um zu verstehen, was vor sich geht.Das Verständnis von Makefiles
Ich habe eine main.cpp-Datei, die auf eine Funktion aufruft, die in function.h und function.cpp definiert ist. Dann habe ich das Makefile gegeben:
main: main.cpp function.o
g++ main.cpp function.o -o main
mainAssembly: main.cpp
g++ -S main.cpp
function.o: function.cpp
g++ -c function.cpp
clean:
rm -f *.o *.S main
linkerError: main.cpp function.o
g++ main.cpp function.o -o main
Was ist los? Was ich soweit verstehe ist, dass wir function.cpp kompilieren, was sich in eine Objektdatei verwandelt? Warum ist das notwendig?
Ich weiß nicht, was der mainAssembly
Teil wirklich tut. Ich habe versucht, die g ++ - Flags zu lesen, aber ich habe immer noch Schwierigkeiten zu verstehen, was das ist. Besteht das nur darin, main.cpp mit den Headern zu kompilieren? Sollten wir main nicht auch in eine Objektdatei konvertieren?
Ich denke, main
einfach ist Haupt genannt alles zusammen in eine exe Verknüpfung? Und ich bin völlig verloren auf was clean
und linkerError
versuchen, zu tun. Kann mir jemand helfen zu verstehen, was vor sich geht?
Vielen Dank! Kannst du nochmal erklären, was du gemeint hast, als du function.o neu definiert hast? Wollen Sie sagen, dass wir vielleicht function.h einbinden müssen, falls function.cpp es in seinen Code aufnimmt? Wie würde eine bessere Compilation genau aussehen? –
[Diese Antwort auf Makefiles] (https://stackoverflow.com/questions/1484817/how-do-i-make-a-simple-makefile-for-gcc-on-linux) sieht viel konventioneller aus. Jede '.h' Datei, die Sie * gemacht haben *, könnte als eine Abhängigkeit aufgelistet werden. Sie können das im '$ (HEADERS)' Teil dieses Beispiels sehen. – tadman
Lies 'x: y z' als" die Erstellung der Datei x hängt von den Dateien y und z ab ". Später haben Sie vielleicht etwas wie "a: x z", wo das heißt "creating a hängt von x und z ab", was bedeutet, dass es auch indirekt von "y" abhängt, weil "x" das tut. Das ist, wo dieses Flussdiagramm wirklich batty wird, wenn diese Abhängigkeiten akkumulieren. Es ist wie "Sandwich: Brot Thunfisch Senf" und dann später "Mittagessen: Sandwich Salat", wo Ihr Mittagessen endet indirekt abhängig von Brot, Thunfisch und Senf. – tadman