La solution d'ismail est une approche courante, mais elle souffre de quelques problèmes sérieux. Si l'utilisateur essaie d'obtenir une compilation de débogage en faisant './configure --enable-debug', le script de configure fixera les CFLAGS à '-g -O2' et le Makefile utilisera '-g3 -O0 .... -g -O2' lors de la construction de tout exécutable. Dans ce cas, gcc utilisera -O2, et certains compilateurs s'arrêteront à cause des options -O conflictuelles. Ces deux scénarios ne sont pas le comportement attendu.
Construire avec des symboles de débogage ou non n'est PAS quelque chose dont le responsable du projet doit se préoccuper. du tout . C'est un problème pour l'utilisateur. Si vous construisez un projet et que vous voulez faire un build de débogage ou un build de version, vous devez utiliser différentes options au moment de la configuration. Par exemple,
$ mkdir debug
$ mkdir release
$ cd debug && /path/to/configure --prefix=/dbg \
CPPFLAGS=-DDEBUG CFLAGS="-g -O0" && make && make install
$ cd ../release && /path/to/configure CPPFLAGS=-DNDEBUG && make && make install
Cela installera une compilation avec `-DDEBUG' et '-g -O0' (une "compilation de débogage") dans /dbg/bin et une installation de "libération" dans /usr/local/bin.
Vous pouvez réduire l'ennui de la saisie nécessaire en utilisant un fichier CONFIG_SITE. Par exemple, vous pouvez le faire :
echo 'CPPFLAGS=-DDEBUG CFLAGS="-g -O0"' >> /dbg/share/config.site
et toutes les invocations futures de 'configure --prefix=/dbg' hériteront automatiquement des paramètres de CPPFLAGS et CFLAGS sans avoir à les spécifier sur la ligne de commande.
Si, en tant que responsable du paquet, vous souhaitez fournir à l'utilisateur un moyen facile de construire une "version de débogage", il est parfaitement acceptable d'inclure un script dans la distribution qui invoque le script de configuration avec les arguments appropriés et invoque make && make install
mais il n'est absolument pas nécessaire d'encombrer vos métafichiers d'outils automatiques avec de tels déchets. Il n'a tout simplement pas sa place ici. Et soyez prévenus, de nombreux paquets ont tenté d'ajouter des métafichiers --enable-debug
qui sont tout simplement faux. Si l'utilisateur invoque configure CFLAGS="-g -O0"
mais obtient une construction qui applique des drapeaux inattendus, alors vous avez un bogue et votre paquet est brisé . C'est une expérience bien trop commune, et si vous maintenez un paquet (actuellement en train de penser à tmux
y curl
) dans lequel l'utilisateur n'obtient pas ce qu'une personne raisonnable appellerait une "compilation de débogage" après avoir invoqué la commande configure CFLAGS="-g -O0"
alors votre paquet est brisé .
Un point important dont il faut toujours se souvenir lors de la maintenance d'un paquet avec les autotools est que l'utilisateur peut utiliser une chaîne d'outils complètement différente de la vôtre. Il est tout à fait possible que la chaîne d'outils de l'utilisateur requière -DMAKE_IT_A_DEBUG
o -DUSE_DEBUG
o -I/non/standard/path/to/headers
. Il faudra peut-être -O145
o -Q
transmis au compilateur ou -debug
transmis au linker, ou ... quoi que ce soit. En tant que mainteneur, vous ne disposez tout simplement pas des informations nécessaires pour que l'expression "debug build" ait un sens pour tous les utilisateurs. N'essayez donc pas, car vous pourriez rendre le logiciel impossible à construire pour un certain nombre d'utilisateurs.
5 votes
Veuillez changer la réponse acceptée de ismall's à William Pursell's. La réponse acceptée est incorrecte.