Синтаксис make-файлов очень строг:
target:dependencies
build_rules
# ^ this space here _needs_ to be a tab.
То, что вы написали, делает all
зависимым от gcc
, -c
, ... которые не являются допустимыми целями.
Что вам нужно, это что-то вроде:
all: hello
hello: factorial.c functions.h hello.c main.c
gcc -o hello factorial.c hello.c main.c
(Если вы хотите скомпилировать и связать за один шаг, не используйте переключатель -c
).