make требует избыточной (чаще всего) информации.
1. Простейший вариант:
myprog file1 file2 > file3
означает что file3 зависит от file1 file2
2. Посложнее:
gcc file.c
означает что file.o зависит от file.c и всех его инклюдов (которые можно получить, дернув соотв. утилитку).
Нужен make, умеющий дедуцировать такое (и желательно добавлять правила для дедукции).