On va peut être clarifier un peu plus que ça, ya pas de "magie noire" dans un IDE, ya juste ce qu'on fait traditionnellement en ligne de commande, mais "caché derrière des boutons", avec parfois un peu moins de flexibilité.
Quand tu développes un projet, tu peux avoir envie de le compiler de différentes façons. (càd avec différentes options de compilation, comme par exemple, les symboles de debug, ou l'optimisation, ou encore en incluant certains fichiers à la place d'autres fichiers...)
Sous Linux, la manière la plus simple de gérer efficacement ces "méthodes" de compilation est de passer par un Makefile. C'est un fichier qui décrit la manière dont doivent être compilés les modules objet, et le projet final, en fonction des paramètres passés en ligne de commande à la commande "make".
Et bien sous CodeBlocks, on retrouve le même principe au travers des "cibles" (targets).
De base, tu as deux cibles par défaut: Debug (pour tester ton logiciel pendant la phase de développement), et Release, qui est censée produire un exécutable livrable, utilisable en production, vide de tout symbole de débogage, etc.
Tu peux cependant créer tes propres cibles via l'onglet "Build Targets" du menu Project -> Properties.
Mais en général, les deux cibles de base sont déjà bien suffisantes pour de petits projets. (tu peux d'ailleurs les modifier pour les adapter à ton contexte, par exemple, ajouter des options de warning sur la cible de debug, et ajouter des options d'optimisation sur la cible de release)
Une liste déroulante te permet de choisir "quelle cible tu compiles" avant de cliquer sur le bouton "Build" (ou le raccourci clavier).
Pour chaque cible, un dossier est créé sous le dossier bin/ de ton projet.
Comme ça par exemple, tu peux conserver une version stable de ton logiciel (Release), et continuer à l'améliorer sur la cible de Debug.