Hilfe beim Vereinfachen eines Makefiles für mehrere ausführbare Dateien

8

Ich habe einen gemeinsamen Code (z. B. hello.cpp ), der von mehreren ausführbaren Dateien verwendet wird. Ich benutze ein einzelnes Makefile, um alles zu erstellen:

%Vor%

Ich bin nicht sehr glücklich über ein separates Ziel für jede ausführbare Datei - die Ziele sind im Wesentlichen die gleichen. Gibt es eine Möglichkeit, dies mit einem Ziel für alle ausführbaren Dateien zu tun? Ich hatte gehofft, dass so etwas funktioniert:

%Vor%

Aber ich bekomme einen Verknüpfungsfehler:

%Vor%

Aus irgendeinem Grund versucht es, app1.out zu erstellen, ohne seine Abhängigkeit hello.o zu erstellen. Kann jemand erklären, warum das nicht funktioniert, und etwas vorschlagen, das tut?

Hier ist der Rest des Dummy-Codes, nur für den Fall.

app1.cpp:

%Vor%

app2.cpp:

%Vor%

hallo.cpp:

%Vor%

Hallo.h:

%Vor%     
misha 12.01.2011, 05:56
quelle

1 Antwort

4

Das Problem scheint zu sein, dass Sie alte Suffixregeln verwenden. Aus der Make-Info:

  

Suffixregeln können keine eigenen Voraussetzungen haben. Wenn sie    Habe irgendwelche, sie werden als normale Dateien mit lustigen Namen behandelt, nicht als    Suffixregeln. Also die Regel:

%Vor%      

sagt, wie man die Datei '.c' aus der erforderlichen Datei 'foo.h' erstellt,    und ist überhaupt nicht wie die Musterregel:

%Vor%      

erklärt, wie man ".o" -Dateien aus ".c" -Dateien macht und alle ".o" -Dateien macht    Dateien, die diese Musterregel verwenden, hängen auch von 'foo.h' ab.

Die Lösung besteht darin, neue Musterregeln zu verwenden:

%Vor%

(Beachten Sie auch, dass Sie keine .cpp für die .o-Regel definieren müssen; make hat eine sinnvolle Standardeinstellung.)

    
Daniel Gallagher 12.01.2011, 06:55
quelle

Tags und Links