2014-07-14 92 views
0

以下makefile的工作原理除了在編譯和鏈接後清理目標文件。我試過make clean,它完全符合我的要求:刪除所有文件夾中的可執行文件和目標文件。我還包括makemake clean的輸出。任何想法?Makefile:對象在編譯和鏈接後不會被刪除

生成文件:輸出make

CC=g++ 
CFLAGS=-c -std=c++11 -O2 -O3 
SOURCES=main.cpp\ 
     BoundaryConditions/BoundaryConditions.cpp\ 
     Cell/Cell.cpp\ 
     Face/Face.cpp\ 
     Formulation/Explicit/Explicit.cpp\ 
     Formulation/Implicit/Implicit.cpp\ 
     Grid/Grid.cpp\ 
     Grid/ReadGrid.cpp\ 
     Grid/SetGrid.cpp\ 
     Init/Init.cpp\ 
     InterFlux/Interflux.cpp\ 
     InterFlux/Roe/Roe.cpp\ 
     Matrix5/Operators.cpp\ 
     Output/Output.cpp\ 
     Solver/GaussSeidel.cpp\ 
     Vector/Vector.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=codeBaku 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

.cpp.o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

.PHONY: clean 
clean: 
    rm -rf $(OBJECTS) $(EXECUTABLE) 

輸出make clean

g++ -c -std=c++11 -O2 -O3 main.cpp -o main.o 
g++ -c -std=c++11 -O2 -O3 BoundaryConditions/BoundaryConditions.cpp -o BoundaryConditions/BoundaryConditions.o 
g++ -c -std=c++11 -O2 -O3 Cell/Cell.cpp -o Cell/Cell.o 
g++ -c -std=c++11 -O2 -O3 Face/Face.cpp -o Face/Face.o 
g++ -c -std=c++11 -O2 -O3 Formulation/Explicit/Explicit.cpp -o Formulation/Explicit/Explicit.o 
g++ -c -std=c++11 -O2 -O3 Formulation/Implicit/Implicit.cpp -o Formulation/Implicit/Implicit.o 
g++ -c -std=c++11 -O2 -O3 Grid/Grid.cpp -o Grid/Grid.o 
g++ -c -std=c++11 -O2 -O3 Grid/ReadGrid.cpp -o Grid/ReadGrid.o 
g++ -c -std=c++11 -O2 -O3 Grid/SetGrid.cpp -o Grid/SetGrid.o 
g++ -c -std=c++11 -O2 -O3 Init/Init.cpp -o Init/Init.o 
g++ -c -std=c++11 -O2 -O3 InterFlux/Interflux.cpp -o InterFlux/Interflux.o 
g++ -c -std=c++11 -O2 -O3 InterFlux/Roe/Roe.cpp -o InterFlux/Roe/Roe.o 
g++ -c -std=c++11 -O2 -O3 Matrix5/Operators.cpp -o Matrix5/Operators.o 
g++ -c -std=c++11 -O2 -O3 Output/Output.cpp -o Output/Output.o 
g++ -c -std=c++11 -O2 -O3 Solver/GaussSeidel.cpp -o Solver/GaussSeidel.o 
g++ -c -std=c++11 -O2 -O3 Vector/Vector.cpp -o Vector/Vector.o 
g++ main.o BoundaryConditions/BoundaryConditions.o Cell/Cell.o Face/Face.o Formulation/Explicit/Explicit.o Formulation/Implicit/Implicit.o Grid/Grid.o Grid/ReadGrid.o Grid/SetGrid.o Init/Init.o InterFlux/Interflux.o InterFlux/Roe/Roe.o Matrix5/Operators.o Output/Output.o Solver/GaussSeidel.o Vector/Vector.o -o codeBaku 

rm -rf main.o BoundaryConditions/BoundaryConditions.o Cell/Cell.o Face/Face.o Formulation/Explicit/Explicit.o Formulation/Implicit/Implicit.o Grid/Grid.o Grid/ReadGrid.o Grid/SetGrid.o Init/Init.o InterFlux/Interflux.o InterFlux/Roe/Roe.o Matrix5/Operators.o Output/Output.o Solver/GaussSeidel.o Vector/Vector.o codeBaku 
+1

你爲什麼期望它刪除目標文件? –

+0

@VaughnCato:然後,我應該怎麼做才能自動刪除目標文件? – Shibli

回答

4

自動刪除目標文件是很常見的,因爲這意味着每次都需要重新編譯所有內容,即使只更改一個源文件也是如此。但是,如果你真的想這樣做,你可以做這樣的事情:

all: $(SOURCES) $(EXECUTABLE) 
     rm $(OBJECTS) 
+0

哦,你是對的。我只是想盡快擺脫這些目標文件,但我忘記了重新編譯的事情。 – Shibli