GNU make正在自动删除我的目标文件。我不明白为什么我的目标是生成小的测试程序,因此每个源文件都是一个独立的程序,不使用其他模块。
我的makefile是:
# This makefile is written for Windows cmd shell
SHELL=C:\Windows\System32\cmd.exe
# FILES
SRCS=$(wildcard src/*.cpp)
BINS=$(patsubst %.cpp,bin/%.exe,$(notdir $(SRCS)))
all:compile
obj/%.o:src/%.cpp
g++ -Wall -Wextra -std=gnu++11 -m64 -D_WIN32_WINNT=0x0400 -c -o $@ $<
bin/%.exe:obj/%.o
g++ -Wall -Wextra -std=gnu++11 -m64 $^ -o $@
clean:
if exist obj\*.o del /Q obj\*.o
mrproper:clean
if exist bin\*.exe del /Q bin\*.exe
compile:$(BINS)
rebuild:clean all
.PHONY:all compile clean mrproper rebuild
例如,使用单个源文件运行GNU make的操作如下:
g++ -Wall -Wextra -std=gnu++11 -m64 -D_WIN32_WINNT=0x0400 -c -o obj/Tester.o src/Tester.cpp
g++ -Wall -Wextra -std=gnu++11 -m64 obj/Tester.o -o bin/Tester.exe
rm obj/Tester.o
为什么删除我的目标文件?如何避免呢?
如果我将obj/%.o:src/%.cpp
替换为obj/Tester.o:src/Tester.cpp
或bin/%.exe:obj/%.o
替换为bin/Tester.exe:obj/Tester.o
,则不会删除文件Tester.o,但这不是我需要的。
由于使用隐式规则(例如'%.o',所以目标文件将在make之后被删除。
添加特殊目标.PRECIOUS
以对其进行保护。
.PRECIOUS: obj/%.o
参考: