Bei Verwendung von GNU-make hat mein Makefile eine Musterregel wie folgt:
%Vor%Diese Regel wird von mir hinzugefügt.
Aber wenn ich es mache, gibt es einen Fehler, der besagt, dass keine Regel das Ziel% .o machen soll, und erstellt keine Ziele.
Manchmal gibt es auch dieses andere Verhalten. Es erstellt das Ziel nicht, wenn ich das erste Mal sage (Es gibt einen Fehler, der sagt: "Keine Regel, um ein Ziel zu machen"), aber wenn ich sage, wiederhole es sofort, baut es korrekt.
Wenn ich also explizit jede Quelldatei einzeln anführe, dann baut sie die Ziele zum ersten Mal selbst auf.
BEARBEITEN: Ich benutze GNU-make auf einem Centos (v6.3 denke ich, nicht sicher). Könnte dies ein Problem mit der Berechtigung / Benutzer-ID / Gruppen-ID sein?
Irgendwelche Hinweise, um zu verstehen, was passieren könnte und eine Lösung dafür?
danke, -AD.
Machen Sie nur eine Musterregel als eine Art Fallback. Zum Beispiel:
%Vor%Das ist in Ordnung. Make berücksichtigt die Musterregel nicht, da Sie sie nicht aufgefordert haben, etwas zu erstellen, und es gibt kein Standardziel im Makefile. Lassen Sie uns darum bitten, etwas zu machen, das die Musterregel verwenden könnte.
%Vor% Erwartet. 1.c
existiert nicht, daher wird die Musterregel nicht berücksichtigt. Lass es uns nochmal versuchen.
(und dann ein Fehler über Haupt fehlt).
Persönlich mag ich diese Ausweichregeln nicht besonders. Ich bevorzuge es, die Ziele explizit aufzulisten. Etwas wie
%Vor%gibt Ihnen eine zielspezifische Musterregel. Diese sind sehr unterschiedlich (siehe Handbuch). [Oh, und das Muster gibt dir keinen Vorteil in diesem Beispiel.]
In der ersten Zeile Ihrer Regel benötigen Sie möglicherweise Leerzeichen um :
. Außerdem verwendet gcc
keinen Doppelpunkt vor dem Namen der Ausgabedatei. Verwenden Sie einfach -o $@
.
Dieses Problem wurde gerade durchlaufen.
Wenn dies Ihre Regel ist:
%Vor%Stellen Sie sicher, dass Sie eine Registerkarte und keine Leerzeichen in der zweiten Zeile vor dem gcc haben. Ich brauchte ein paar Stunden, um es herauszufinden. Auch kein ':' nach der -o-Flagge, wie jemand anders darauf hingewiesen hat.
Sind Sie sicher, dass die .c-Datei existiert? Ich denke, die Verwendung von -d, wie es früher vorgeschlagen wurde, sollte helfen, dies zu debuggen.
Tags und Links gnu-make