CScope & exuberant Ctags
Quelques outils d’indexation de code pour le développeur.
CTags & Exuberant Ctags
Ctags était un programme Unix écrit par Steve Kirkendall qui génère un fichier index (tag) des fonctions, variables, classes, macros, ... trouvées dans des fichiers source C.
Exuberant Ctags, évolution de ctags écrite par Darren Hiebert à partir de 1996, il fut initialement distribué avec Vim, puis est devenu un projet séparé depuis la version 6 de Vim. Il est compatible avec GNU Emacs.
Exuberant Ctags inclu le support de plus de 40 languages de programmation et autorise l’ajout de nouvelles syntaxes via des expressions régulières.
ETAGS
Etags est l’utilitaire Ctags fourni avec GNU Emacs :
M-x shell $ find . -name "*/*/*.c*" | xargs etags —append — declarations —members —lang=c
M-x shell $ find . -name "*/*/*.h*" | xargs etags —append — declarations —members —lang=c
Puis dans les sources, le curseur sur un objet (fonction, variable, define, ...) M-.
permet de lister où est défini le tag en question.
Cscope
cscope est un outil pour développeurs permettant de naviguer dans le code source.
Pour l’utiliser avec GNU Emacs :
– Tout d’abord charger l’extension xcscope.el livré avec cscope dans son .emacs :
;; CScope
(require 'xcscope)
– Puis indexer une base de code, pour cela un petit script shell, cscope_indexer.bash, pour se simplifier la vie :
#! /usr/bin/bash
#
# Automatically rebuild CScope cross-reference DB from a list of directories.
#
MY_WA=~/dev
if [ $# -ne 1 -o "$1" == "-h" -o "$1" == "--help" ]; then
echo "Usage: ${0} <proj.lst>"
echo ""
echo "Build CScope cross-reference database from a list of working area."
echo ""
exit 1
else
# Get working area list (proj.lst)
PROJ_LST=$1
echo "Indexing:"
cat ${PROJ_LST}
PROJ_FILES="${MY_WA}/cscope-${PROJ_LST%.lst}.files"
echo -n "Building files list..."
rm -f ${PROJ_FILES}
for d in `grep -v "#" $PROJ_LST`; do
find $d -name "*.[hc]"
done >> ${PROJ_FILES}
#cat ${PROJ_FILES}
echo " and create symlink."
rm -f cscope.files
ln -s ${PROJ_FILES} cscope.files
echo "Building CScope database:"
cscope -bv
fi
Permetant ainsi d’indexer (cscope.out) les fichiers header et source C trouvés (cscope.files) dans une liste de répertoires.
Dans Emacs, indiquer tout d’abord où se trouve le fichier cscope.out : M-x cscope-set-initial-directory
.
Puis on utilisera, par exemple, les séquences de touches :
-
C-c s d
pour trouver la définition d’un symbol, - ou
C-c s c
pour lister les fonctions appelant la fonction sélectionnée.