Here's an example:
$ ls
Makefile
$ cat Makefile
# Constructs a directory foo that contains a file bar.
foo: bar
rm -f -r foo
mkdir foo
cp bar foo
$ touch bar
$ make foo
rm -f -r foo
mkdir foo
cp bar foo
$ touch bar
$ make -t foo
touch foo
make: touch: open: foo: Is a directory
$ make --version | head -n 1
GNU Make 4.4.1
I tracked this down in the source code with "git grep 'touch: open'" and
found that touch is implemented in src/remake.c by reading one byte from
the target and writing it back, which fails if the target already exists
as a directory.