Sous Unix, il est courant de réaliser les makefile à la main sans avoir recours à un environnement de développement.
Le développeur Windows se sent tout nu au début dans la mesure ou il doit réaliser manuellement tout ce que Visual Studio ou même Dev CPP (etc...) fait pour lui.
On peut noter que les environnements de développement (kdevelop, Eclipse, Anjuta) permettent de masquer tout cela.
Un makefile a l'aspect suivant sous Unix (et sous Windows aussi d'ailleurs !!)
all: coucou coucou: coucou.o gcc coucou.o -o coucou # -c pour compiler, -g pour le mode debug coucou.o: coucou.c gcc -c -g coucou.c -o coucou.o
On fera attention aux caractères spéciaux, en particulier les ^M (retours chariots) qui apparaîssent lorsque l'on récupère un texte tapé sous un éditeur Windows type notepad et qui posent des problèmes. On peut d'ailleurs les supprimer dans vi avec la commande suivante :
:1,$s/^M// (faire Control V Control M pour afficher le ^M) => De la ligne 1 à la fin, on remplace le Control M par rien
Ici, le but est de compiler le programme coucou.c suivant :
#include <stdio.h> int main() { printf( "coucou\n" ); return 0; }
Si on veut porter un programme sur un maximum de plateformes Unix, if faut tôt ou tard se plonger dans les arcanes d'autoconf (Eh oui, le C est portable, mais chaque Unix a ses propres spécificités comme des prototypes différents ou des API différentes etc...)
Tout développeur qui se respecte se doit de savoir utiliser un débogueur. Le débogueur incontournable sous Unix est gdb. Pour que le programme puisse être débogué, il faut bien sur le compiler en débug avec -g.
Ci dessous, voici comment déboguer notre programme :
$ gdb coucou (gdb) b main (gdb) r Breakpoint 1, main () at coucou.c:5 5 printf( "coucou\n" ); (gdb) n coucou 6 return 0; (gdb)
Les commandes usuelles sont :
Pour déboguer un programme qui tourne déjà, on récupère son numéro de process avec ps comme suit :
ps -ef | grep coucou ou (fonction de la version d'Unix (linux, freebsd, solaris ...) ps -aux | grep coucou
puis pour le déboguer (par exemple 1830 est le numéro de processus) :
$gdb coucou 1830
Il existe un frontal graphique à gdb, ddd qui peut éviter d'avoir à mémoriser ces commandes. toutefois, lorsque seul un modem 56 K permet d'accèder à la machine à déboguer, gdb reste le meilleur choix.
Il faut utiliser sans hésiter valgrind. Voir quelques explications ici