Vous confondez 2 choses : la compilation et l'édition de liens. Reprenez donc en détails le tuto sur make pour comprendre les concepts clés. Je résume ici :
- les fichiers .h sont nécessaire à la compilation ; la commande dont vous parlez donne les dépendances pour compiler main.c en main.o ; il n'y a en effet là pas besoin de cg/cg.h
- les fichiers .o sont mis ensemble pour l'édition de liens = la création du programme complet. Pour le programme complet, cg.o est nécessaire (simplement parce que un autre composant que main.o l'utilise).