Makefile-Musterregel schlägt fehl?

8

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.

    
goldenmean 01.03.2011, 14:01
quelle

4 Antworten

12

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.

%Vor%

(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.]

    
bobbogo 04.03.2011 13:11
quelle
2

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 $@ .

    
Jeremiah Willcock 01.03.2011 14:21
quelle
0

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.

    
user2113490 27.02.2013 01:05
quelle
0

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.

    
user338519 28.03.2013 18:05
quelle

Tags und Links