避免自动删除gnu文件

问题描述 投票:0回答:1

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.cppbin/%.exe:obj/%.o替换为bin/Tester.exe:obj/Tester.o,则不会删除文件Tester.o,但这不是我需要的。

makefile
1个回答
1
投票

由于使用隐式规则(例如'%.o',所以目标文件将在make之后被删除。

添加特殊目标.PRECIOUS以对其进行保护。

.PRECIOUS: obj/%.o

参考:

Special Built-in Target Names

Chains of Implicit Rules

© www.soinside.com 2019 - 2024. All rights reserved.