2013-02-08 74 views
3

我有一個簡單的Makefile,爲什麼要刪除我的臨時文件?

.PHONY: clean 

PROGRAMS=$(patsubst main%.cpp,example%,$(wildcard main*.cpp)) 

all: ${PROGRAMS} 

GCCVERSION=$(shell gcc -dumpversion) 

GLCFLAGS=$(shell pkg-config --cflags gl) 
CPPFLAGS=-Wall -O2 ${GLCFLAGS} 
ifeq "${GCCVERSION}" "4.5.2" 
    CXXFLAGS=-std=c++0x 
else 
    CXXFLAGS=-std=c++11 
endif 

GLLIBS=$(shell pkg-config --libs gl) 
LIBS=${GLLIBS} -lglut 

example%: main%.o shaders.o fileutils.o 
    ${CXX} $^ ${LIBS} -o [email protected] 

clean: 
    rm -f *.o ${PROGRAMS} 

但是,當我執行它,它刪除* .o文件作爲最後一個命令。我不知道爲什麼:

$ make 
g++ -std=c++11 -Wall -O2 -I/usr/include/libdrm -c -o main01.o main01.cpp 
g++ -std=c++11 -Wall -O2 -I/usr/include/libdrm -c -o shaders.o shaders.cpp 
g++ -std=c++11 -Wall -O2 -I/usr/include/libdrm -c -o fileutils.o fileutils.cpp 
g++ main01.o shaders.o fileutils.o -lGL -lglut -o example01 
rm main01.o fileutils.o shaders.o 

我的Makefile有什麼問題嗎?

回答

3

中間文件被刪除設計:見GNU make手冊中的Chained Rules

使用.SECONDARY.PRECIOUS目標來保留您的precioussss臨時文件。

+0

我打了這樣的問題,但只有.PRECIOUS沒有工作沒有.SECONDARY(見http://stackoverflow.com/questions/ 27090032 /爲什麼make-remove-intermediate-file-even-secondary-and-require-to-use-preci),如果你介意看看... – 2014-11-23 16:57:40

3

只是爲了澄清之前的響應,你需要添加一個特殊的規則像

.PRECIOUS: myfile.o