2012-10-11 7 views
7
ausgeführt

Ich habe folgende Make-Datei:Nur erster Befehl von Make-Datei wird

main.o: ServerSocket/main.cpp ../Shared/socket.h 
    g++ -c ServerSocket/main.cpp -lstdc++ 

DriveInfo.o: ServerSocket/DriveInfo.cpp ServerSocket/DriveInfo.h ServerSocket/Consts.h 
    g++ -c ServerSocket/DriveInfo.cpp -lstdc++ 

ProcessInfo.o: ServerSocket/ProcessInfo.cpp ServerSocket/ProcessInfo.h ServerSocket/Consts.h 
    g++ -c ServerSocket/ProcessInfo.cpp -lstdc++ 

thread_pool.o: ServerSocket/thread_pool.cpp ServerSocket/thread_pool.h 
DriveInfo.o ProcessInfo.o thread_pool.o 
server: main.o 
    g++ -o server main.o 
DriveInfo.o ProcessInfo.o thread_pool.o 

Problem ist nur ein Befehl der Datei ausgeführt wird, so dass, wenn ich den nächsten < Ich habe zu löschen oder Kommentar ausführen möge vorheriger Befehl Was ist mit diesem Makefile falsch?

+0

Da diese Frage abgesehen von der Tatsache, dass die fraglichen Dateien mit gcc kompiliert werden, wirklich nichts mit C++ zu tun hat, habe ich das [C++] -Tag entfernt. –

Antwort

17

Machen Sie standardmäßig die erste Regel, die Sie ihr zur Verfügung stellen.

Sie möchten eine Regel erstellen, die alle Regeln ausführen Ihnen

all : main.o DriveInfo.o ProcessInfo.o thread_pool.o 

und legen Sie sie an der von Ihrem Makefile beginnen oder nennen Sie es mit make all

+0

Danke, das hat funktioniert :) –

4

Das ist von Entwurf. Sie können make sagen, welche zu bauen Ziele:

make main.o DriveInfo.o 

diese beiden Ziele bauen. Alternativ, wenn Sie make standardmäßig mögen alle (oder einige) Ziele zu bauen, Sie eine Regel am Anfang des Makefiles dass die Angabe angeben:

all: main.o DriveInfo.o … 

Nun make all (oder nur make) bauen alle abhängigen Ziele Es ist auch eine gute Vorgehensweise, all als phony target zu deklarieren, um make mitzuteilen, dass es einer tatsächlich existierenden Datei nicht entspricht. Tun Sie dies, indem Sie .PHONY: all in das Makefile setzen.

Eine abschließende Bemerkung, der Name all ist beliebig. Sie könnten hier einen anderen Namen verwenden, aber all ist konventionell. Der wichtige Teil ist, dass es die erste Regel in Ihrem Makefile ist, wenn Sie möchten, dass es derjenige ist, der ausgeführt wird, wenn Sie make ohne explizite Ziele aufrufen.