GNU make 会自动删除我的目标文件。我不明白为什么......我的目标是生成小型测试程序,因此每个源文件都是一个独立的程序,不使用其他模块。
我的生成文件是:
# 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
Run Code Online (Sandbox Code Playgroud)
例如,使用单个源文件运行 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
Run Code Online (Sandbox Code Playgroud)
为什么我的目标文件被删除?如何避免呢?
如果我替换obj/%.o:src/%.cpp为obj/Tester.o:src/Tester.cpp或bin/%.exe:obj/%.o由bin/Tester.exe:obj/Tester.o文件 Tester.o 不会被删除,但这不是我需要的。
小智 5
由于您使用隐式规则(例如\xe2\x80\x98%.o\xe2\x80\x99),目标文件将在make后被删除。
\n\n添加特殊目标.PRECIOUS来保护它。
.PRECIOUS: obj/%.o\nRun Code Online (Sandbox Code Playgroud)\n\n参考:
\n\n\n\n\n