Wenn Sie nur eine Datei kompilieren und nicht verknüpfen, verwenden Sie das Flag "-c".
Zum Beispiel: -
%Vor%Auch beim Kompilieren gibt es keine Notwendigkeit , dem Compiler "$ (LIBS)" bereitzustellen, sondern nur beim Verknüpfen. Sie benötigen auch nicht die Linker-Flags, da der Linker nicht mit dem Flag "-c" aufgerufen wird.
Du könntest also schreiben,
%Vor%AKTUALISIERT (basierend auf Kommentaren): -
Beim Verknüpfen der Dateien erwartet der Linker nur eine main
-Funktion. Im obigen Fall ist die Hauptfunktion nicht in db.cpp
definiert. Daher gibt der Linker, obwohl die Kompilierung erfolgreich ist, einen Fehler aus, da er die Funktion main
nicht finden kann.
Wenn Sie ohne das Flag -c kompilieren, versucht gcc, das Programm zu verknüpfen. Da die Hauptfunktion höchstwahrscheinlich in der Datei main.c und nicht in db.c liegt, schlägt der Linker beim Suchen nach der Hauptfunktion in db.c fehl. Dies bedeutet, dass Sie dem Compiler mitteilen müssen, dass Sie nur eine Ausgabe wünschen, die noch nicht verknüpft, aber in eine Objektdatei übersetzt wurde, und dies ist genau das, was das Flag -c tut.
Das ergibt was rajatkhanduja sagte:
%Vor%Ich schätze, du hast die Link-Regel verpasst.
Sie sollten eine erste Regel haben, die sagt, wie man verlinkt:
%Vor% Und diese Regel muss die Voraussetzung für all
:
Da alle Ihre "* .o: * .cpp" -Regeln identisch sind, können Sie eine einzelne Regel angeben und make
die Dateinamen für Sie ersetzen.
Fragen Sie, ob Sie weitere Daten dazu benötigen.