2010-10-20 19 views
8

J'ai installé emacs 23.1.50.1 avec CEDET 1.0 et ECB 2.40 (fortement inspiré par la configuration d'Alex Otts au http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el et sa douce introduction à Cedet (http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html), merci Alex). Cela fonctionne plutôt bien, mais j'ai besoin de plus de compréhension sur la façon dont le code-achèvement et les références-symboles sont gérés lorsque vous travaillez avec plusieurs projets.Emacs/CEDET. Plusieurs projets et achèvement de code

J'ai créé un projet simple ede comme ceci:

(ede-cpp-root-project "test" 
         :file "~/src/sw/anchor" 
         :include-path '("/Common") 
         :system-include-path '("~/include")) 

Lorsque ce projet est chargé, sera sémantique ne chercher achèvements dans les différents répertoires spécifiés dans les configurations de projet?

J'ai suivi http://mmmyddd.freeshell.net/blog/Computer/Emacs/usecscopesemanticdbbackend pour utiliser cscope comme backend pour semanticdb. Je peux lancer semanticdb-enable-cscope-in-buffer sans que emacs ne lance d'erreur, mais je ne sais pas si la sémantique utilise ma base de données. Puis-je ajouter une référence à un cscope.out dans ma définition de projet, pour avoir plus de contrôle sur les fichiers à rechercher des références dans mon contexte actuel?

Quelques bizarreries:

Lorsque je tente d'ouvrir un nouveau fichier source, je reçois l'erreur « appliquer: Recherche d'un programme: Aucun fichier ou répertoire, global » et rien ne se passe. Si j'essaie de l'ouvrir à nouveau, tout va bien.

Lorsque je tente de charger un projet en pointant le fichier d'ancrage, je reçois cette erreur: « si: argument de type incorrect: classe-p, ede-cpp-root »

+0

Pour l'erreur "appliquer: recherche de programme: pas de fichier ou de répertoire, global", avez-vous copié la partie de la configuration d'Alex Ott qui a utilisé "(semanticdb-enable-gnu-global-databases ...)"? – Dingo

+0

C'est ce que j'ai fait, mais je suppose que je n'en ai pas besoin. Le fait qu'il dise "gnu global support", aurait dû faire suspecter le problème était là :). Merci. – anr78

Répondre

5

Lorsque vous obtenez des erreurs dans votre configuration, la meilleure chose à faire est:

M-x toggle-debug-on-error RET 

et d'obtenir la trace de la pile qui pointera sur la zone à problème. Souvent, cela est utile pour identifier le problème de configuration. CEDET essayera d'associer chaque fichier à un seul projet, et toutes les commandes qui fonctionnent dans ce tampon seront limitées aux limites de ce projet. Pour le support de CScope, il utilisera aussi EDE pour identifier le répertoire racine, ce qui aidera à trouver le fichier cscope.out, et cela est lié à la fois aux outils d'achèvement et de référence.

L'exception, bien sûr, est le chemin d'inclusion du système qui est habituellement/usr/include ou autre. Ceci est une augmentation du chemin d'inclusion du système par défaut qui est calculée avec le support GCC. Dans l'un de vos fichiers C vous pouvez faire:

M-x semantic-c-describe-environment RET 

et qui devrait montrer ce que sémantique va essayer d'utiliser.

vérifier si CScope est utilisé pour la complétion de code, vous pouvez vérifier avec:

M-x semanticdb-find-test-translate-path RET 

et vérifiez la fin de la liste pour quelque chose CScope.

+0

Merci Eric, à la fois pour la réponse et le logiciel. Ces commandes sont en effet très utiles.Actuellement, sémantique-c-describe-environment ne dit rien sur cscope, et semanticdb-find-test-translate-path dit: * #

anr78

+0

Droite, la cscope le support ne se soucie pas de calculer le nombre de tags que CScope connaît, et il ne fait pas vraiment partie du "projet" puisque les internes sont abstraits, donc l'environnement C ne le sait pas. – Eric