2017-02-09 1 views
1

après avoir lu un excellent article intitulé "Une introduction douce à CEDET" qui a écrit par Alex Ott. Je fais un peu d'expérience pour les projets C++ dans ma emacs 24.3 et la dernière cédette dans "https://git.code.sf.net/p/cedet/git" (aussi dans emacs 23.1 et stable cedet1.1). J'en suis assez satisfait à l'exception d'un petit problème de "saut à la fonction" dans "semantic-analysis-proto-impl-toggle". mon projet est très simple (seulement 2 fichiers):emacs cedet "sémantique-analyse-proto-impl-toggle" ne peut pas passer à l'outil approprié

1) fichier tête "y.hpp" en dir "~/emacs/test/zz1 /"

class y{ 
    public: 
     int y1(int);//error here! semantic can't found implement in y.cpp 
}; 

2) mettre en œuvre le fichier « y cpp » en dir "~/emacs/test/ZZ2 /"

#include "y.hpp" 
    int y::y1(int b) // semantic can found definition in y.hpp 
    { 
    return 0; 
    } 

ma config cedet est basé sur l » alex OOT "minimial-cedet-config.el" (https://gist.github.com/alexott/3930120) et ajouter qu'à la suite deux lignes:

(sémantique add-système comprennent "~/emacs/test/zz1 /" « C++ - Mode)

(sémantique add-système comprennent "~/emacs/test/ZZ2 /" « C++ - Mode)

j'ai vérifié mon cache db sémantique et trouvé tous les fichiers db est de créer correctement, c'est d'info partie dans le cache db y.hpp dans zz1:

("y1" function 
         (:prototype-flag t 
         :arguments 
          (("" variable (:type "int") (reparse-symbol arg-sub-list) [27 31]))       
         :type "int") 
         (reparse-symbol classsubparts) [20 32]) 

cela fait partie info in cache db pour y.cpp dans zz2:

("y1" function 
       (:parent "y" 
       :arguments 
        (("b" variable (:type "int") (reparse-symbol arg-sub-list) [28 34]))     
       :type "int") 
       nil [18 50]) 

Répondre

1

après avoir reçu la suggestion de Eric Ludlam. Je crois que le problème est que Semantic ne connaît pas ces deux fichiers appartiennent au même projet. L'astuce de l'en-tête du système peut aider dans une direction mais pas de manière bidirectionnelle.

La façon d'enseigner qu'il appartient dans le même projet est de permettre EDE, alors assurez-vous qu'il ya un projet EDE il, comme l'utilisation du type de projet « ede-cpp-root », comme ceci:

;; assurez-vous FNAME existe **

(ede-cpp-root-projet "TEST": fichier "~/emacs/test/FNAME" : include-path « ("/ zz1" "/ ZZ2"))

Puisque vous avez déjà

(ede-enable-projets génériques)

vous pouvez aussi simplement mettre en tenir tout git ou CVS et il découvrir un projet. Ensuite, customisez-project et ajoutez les chemins d'accès pour vous assurer qu'il peut tout trouver. Une fois que vous commencerez à utiliser des projets EDE pour spécifier des racines de projet, la sémantique aura une bien meilleure prise en charge de ses systèmes de navigation et de complétion.

et nous ne avons pas besoin suivant plus de deux lignes:

(sémantique add-système comprennent "~/emacs/test/zz1 /" « C++ - Mode)

(sémantique-add-system-include "~/emacs/test/zz2 /" 'C++ - mode)