【问题标题】:emacs cedet semantic with Qt4 how to configure带有Qt4的emacs cedet语义如何配置
【发布时间】:2012-08-03 13:30:15
【问题描述】:

我在 X86_64-pc-gnu-linux (ubuntu 10.04) 上使用 emacs 23.1.1 并按照著名的链接 http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html 将所有配置添加到 .emacs。 但它甚至不能完成基本的工作。我的设置或配置一定有问题。

如果我试图让它显示成员函数,它无法找到。 [自动完成使用clang作为解析器。那么解析器语义使用什么? ]

;; Load CEDET
(load-file "~/backup/cedet-trunk/common/cedet.el")
(global-ede-mode 1)                      
;(semantic-load-enable-code-helpers)       
(semantic-load-enable-excessive-code-helpers)
;(semantic-load-enable-semantic-debugging-helpers)
(global-srecode-minor-mode 1)            
(global-semantic-tag-folding-mode 1)
(require 'semantic-tag-folding)
(global-semantic-idle-scheduler-mode 1)
(global-semantic-idle-completions-mode 1)
(global-semantic-idle-summary-mode 1)
(global-semantic-idle-completions-mode)
(require 'semantic-ia)
(require 'eassist)
(require 'semantic-gcc)
(require 'semanticdb-global)
(semanticdb-enable-gnu-global-databases 'c-mode)
(semanticdb-enable-gnu-global-databases 'c++-mode)
(setq qt4-base-dir "/usr/include/qt4")
(setq qt4-gui-dir (concat qt4-base-dir "/QtGui"))
(setq qt4-core-dir (concat qt4-base-dir "/QtCore"))
(semantic-add-system-include qt4-base-dir 'c++-mode)
(semantic-add-system-include qt4-gui-dir 'c++-mode)
(semantic-add-system-include qt4-core-dir 'c++-mode)
(add-to-list 'auto-mode-alist (cons qt4-base-dir 'c++-mode))
(add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir 
"/Qt/qconfig.h"))
(add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qconfig-large.h"))
(add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qglobal.h"))

(defun my-cedet-hook ()
 (local-set-key [(control return)] 'semantic-ia-complete-symbol-menu)
 (local-set-key "\C-c?" 'semantic-ia-complete-symbol)
 (local-set-key "\C-c>" 'semantic-complete-analyze-inline)
 (local-set-key "\C-c=" 'semantic-decoration-include-visit)
 (local-set-key "\C-cj" 'semantic-ia-fast-jump)
 (local-set-key "\C-cb" 'semantic-mrub-switch-tags)
 (local-set-key "\C-cd" 'semantic-ia-show-doc)
 (local-set-key "\C-cs" 'semantic-ia-show-summary)
 (local-set-key "\C-cp" 'semantic-analyze-proto-impl-toggle)
 (local-set-key "\C-cr" 'semantic-symref)
 (local-set-key "\C-c\-" 'senator-fold-tag)
 (local-set-key "\C-c\+" 'senator-unfold-tag)
 )

(add-hook 'c-mode-common-hook 'my-cedet-hook)
(add-hook 'lisp-mode-hook 'my-cedet-hook)
(add-hook 'emacs-lisp-mode-hook 'my-cedet-hook)

(ede-cpp-root-project "Test"
        :name "Test Project"
        :file "~/project/shared/test-qt-semantic.cpp"
        :include-path '("/"
               )
        :system-include-path '("/usr/include/qt4"
                   "/usr/include/qt4/Qt"
                   "/usr/include/qt4/QtGui"
                   "/usr/include/qt4/QtCore"
                   ))

这是源文件:

#include <QApplication>
#include <QPushButton>
#include <QString>
int main (int argc, char ** argv)
{
QApplication app (argc, argv);
QPushButton hello ("Hello, World!");
hello.resize (100, 30);
hello.show ();
QString id("hi");
return app.exec ();
} 

找不到“class QPushButton hello ()”的数据类型。
声明的类型是:“类 QPushButton {}”
原始数据类型为:("QPushButton" type (:type "class") nil nil)

语义在其任何全局表中都找不到此数据类型。

语义通过本地范围或全局范围定位数据类型 类型缓存。

本地范围信息:
* 针对 SCOPE 的标记类约束:(类型)
* 当前范围内没有已知的父母。
* 目前范围内没有已知符号。
* 没有本地声明的已知符号。
语义为每个缓冲区创建并维护一个类型缓存。
如果类型是全局类型,那么它应该出现在它们的类型缓存中。
要检查类型缓存,请键入:

M-x semanticdb-typecache-dump RET [ Do It ]

当前类型缓存统计:
此文件中有 0 种全局类型
包含 0 种类型。

如果数据类型不在类型缓存中,那么你的包含 路径可能不正确。

包括路径摘要:

此文件的项目包含搜索由 EDE 对象处理:
缓冲区目标:#ede-cpp-root-target /home/mike/project/shared/>
缓冲项目:#ede-cpp-root-project 测试>
备份定位器:#ede-locate-base Loc>

系统包含路径为:

/usr/include/qt4/
/usr/include/qt4/QtGui/ 
/usr/include/qt4/QtCore/
/usr/include/c++/4.4/
/usr/include/c++/4.4/x86_64-linux-gnu/
/usr/include/c++/4.4/backward/
/usr/local/include/
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include-fixed/
/usr/include/

包括摘要:/home/mike/project/shared/test-qt-semantic.cpp

test-qt-semantic.cpp 包含 3 个包含。
未知包括:0
未解析的包括:0
解析包括:3
没有未知的包括。

【问题讨论】:

  • 鉴于他们没有 cedet-users 邮件列表,我建议您也尝试cedet-devel。 (我也在尝试开始学习 CEDET,到目前为止一直很艰难)

标签: emacs emacs23 cedet


【解决方案1】:

它在底部说:

看来,这种方法不适用于新的 CEDET - 我正在修复

然后他在评论中说:

看来,CEDET 没有正确编译。请从 CVS 获取 CEDET 并按照说明编译

所以我认为你应该再次编译和构建它,然后它应该可以工作 - 但我还没有尝试过。我只是建议它,因为那是文章所说的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多