Когда вы просто даете make, он создает первое правило в вашем make-файле, т.е. "all". Вы указали, что «все» зависит от «привет», который зависит от main.o, factorial.o и hello.o. Поэтому make пытается проверить, присутствуют ли эти файлы.
Если они присутствуют, 'make' видит, есть ли их зависимости, например, main.o имеет зависимость main.c, изменился. Если они изменились, make перестраивает их, иначе пропускает правило. Точно так же он рекурсивно продолжает сборку измененных файлов и, наконец, запускает самую верхнюю команду, «all» в вашем случае, чтобы дать вам исполняемый файл, «hello» в вашем случае.
Если их нет, make вслепую строит все по правилу.
Если говорить о вашей проблеме, то это не ошибка, но 'make' говорит, что каждая зависимость в вашем make-файле обновлена и ей не нужно ничего создавать!