2012-10-11 124 views
7

我有以下生成文件:只有第一個命令執行

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 

問題只有一個正在執行該文件的命令,所以如果我想執行下一個<我不得不刪除或評論先前的命令。這個makefile有什麼問題?

+0

由於這個問題實際上與C++無關,除了使用gcc編譯的文件外,我移除了[C++]標記。 –

回答

17

默認執行您提供的第一條規則。

你想創建一個執行所有的規則的規則你提供

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

,並將其放置在開始您的Makefile或make all

+0

謝謝,那工作:) –

4

這是由設計調用它。您可以告訴make要構建哪些目標:

make main.o DriveInfo.o 

將構建這兩個目標。另外,如果你想用默認值建立所有(或部分)的目標make,你可以在Makefile年初指定的規則指出:

all: main.o DriveInfo.o … 

現在,make all(或只是make)將建立所有依賴目標。將all聲明爲phony target以告知make它不對應於實際存在的文件也是一種好的做法。將.PHONY: all放入Makefile中。

最後一句話,名稱all是任意的。您可以在這裏使用任何其他名稱,但all是常規的。重要的部分是,如果你希望它是你在沒有任何明確目標的情況下調用make時執行的規則,那麼它就是你的Makefile中的第一個規則。

相關問題