I have this Makefile:

```
PROJECT_DIR = $(abspath ..)

BUILDDIR = $(PROJECT_DIR)/build
OBJDIR   = $(BUILDDIR)/obj
BINDIR   = $(BUILDDIR)/bin
SRCDIR   = $(PROJECT_DIR)/src/app
SOURCES  := $(wildcard $(SRCDIR)/*.cpp)
INCLUDES := $(wildcard $(SRCDIR)/*.h)
OBJECTS  := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)

APPNAME=blink
APP=$(BINDIR)/$(APPNAME)

all: $(APP).elf

dirs:
    @echo "Project dir: " $(PROJECT_DIR)
    mkdir -p $(BUILDDIR)
    mkdir -p $(OBJDIR)
    mkdir -p $(BINDIR)

# Link
$(APP).elf: $(OBJECTS)
    $(CPP) $(CPPFLAGS) -o $@ $^
    @echo "Linked "$<" successfully!"

# Compile:
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp dirs
    $(CPP) $(CPPFLAGS) -c $< -o $@
    @echo "Compiled successfully"

```

When I run: `make` all files are re-compiled every time instead of doing this only when source code change. I suspect that it is because the`build` directory timestamp is updated together with `${APP}.elf` target but not sure how to solve it.