Ça n’est pas parce que c’est du binaire que le système d’exploitation sait quoi faire avec…
Je ne suis pas très pédagogue et je n’ai sûrement pas les bons mots, mais je vais tenter une petite explication…
Lorsque tu compile ton *.c en *.o, ton fichier source passe à la moulinette de gcc, et tu obtiens donc le code objet dans le *.o
Pour avoir un exécutable, il faut que gcc regroupe éventuellement les différents *.o (mais il peut y en avoir un seul), les *.a (librairies statiques s’il y en a), etc… pour construire un exécutable au bon format (ELF sous linux) pour qu’il soit reconnu par le système d’exploitation. On appelle cela l’édition de liens. Après, avec l’exécutable, ton OS sait par quelle instruction il doit commencer, etc…
Quand tu fais “Compiler” sous Geany, tu ne fais que la compilation. Quand tu fais “construire”, tu fais la compilation et l’édition de liens, et tu te retrouve avec un exécutable ELF que tu peux exécuter.
Tu peux faire un exécutable à partir de plusieurs sources, il faut azlors faire de la compilation séparée : tu compile chaque *.c en *.o, puis tu fais une édition de liens avec tous ces *.o pour avoir un seul exécutable. Là les raccourcis de Geany ne sont pas pratiques, il vaut mieux passer par un Makefile ou un autre gestionnaire de projet permettant d’automatiser les étapes.
Quelques recherches sur le net t’en apprendront sûrement beaucoup sur le sujet 
@+