Сделал вот такой makefile, прописал цель "clean":
# .PHONY: all clean
all: hello.o main.o
gcc -o hello main.o hello.o
hello.o: hello.c
gcc -o hello.o -c hello.c
main.o: main.c
gcc -o main.o -c main.c
clean:
-rm ./*.o 2>/dev/null
Но он ругается, если нет файлов для удаления:
$ make all
gcc -o hello.o -c hello.c
gcc -o main.o -c main.c
gcc -o hello main.o hello.o
$ make clean
rm ./*.o 2>/dev/null
$ make clean
rm ./*.o 2>/dev/null
makefile:9: recipe for target 'clean' failed
make: [clean] Error 1 (игнорирование)