I tried to use `.DELETE_ON_ERROR` target in makefile in order to delete both `$(OBJ)`
and `executable` files if the recipe fails, but it doesn't work. If I put an error inside any object file than while compiling the pattern rule an error occurs and it stops. The old object file is still on its place but I expect `.DELETE_ON_ERROR` to remove it.

Can anyone test the code? Can `-include $(DEP)` or flag `-DDBG` influence? The goal is to delete both the `.o` file that failed and the `executable`.

```
OUTPUT = executable
CPP := $(shell find $(SRC) -type f -name "*.cpp")
OBJ := $(CPP:.cpp=.o)
DEP := $(OBJ:.o=.d)

CXX := g++
CXXFLAGS =-MMD -MP -DDBG
INCLUDES = -I.

.DELETE_ON_ERROR :

$(OUTPUT): $(OBJ)
    $(CXX) $^ -o $@

%.o: %.cpp
    $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

-include $(DEP)

.PHONY : clean
clean:
    rm -rf $(OBJ) $(DEP) 

```

---

EDIT: According to the Ondrej K. solution to fix this problem you need to add `@touch` command before compilator in order to make the object files changed (the docs read *"delete the target of a rule if it has changed"*.). So, the code should look like this:

```
%.o: %.cpp
    @touch $@
    $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

```