我有一个简单的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 $@
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有什么问题吗?
答案 0 :(得分:3)
设计删除中间文件:请参阅GNU make manual中的Chained Rules。
使用.SECONDARY
或.PRECIOUS
目标来保存您的精确临时文件。
答案 1 :(得分:3)
为了澄清之前的回复,您需要添加一个特殊的规则,如
.PRECIOUS: myfile.o