LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 867|回复: 13

有关emacs调用semantic补全的问题

[复制链接]
发表于 2011-9-22 14:43:03 | 显示全部楼层 |阅读模式
以前都是从http://cedet.sourceforge.net/下载编译cedet,可是现在总是编译出错,刚好发现emacs23自带了cedet.就按照emacser.com的介绍配置了下,但是semantic只能补全用户定义的成员.
emacs是emerge安装的23.3.1
  1. cedet-version
  2. CEDET Version:        1.0
  3.                           Requested        File                Loaded
  4.   Package                Version                Version                Version
  5.   ----------------------------------------------------------
  6.   cedet:                        1.0                ok                ok
  7.   eieio:                        1.3                ok                ok
  8.   semantic:                2.0                ok                ok
  9.   srecode:                1.0                ok                Not Loaded
  10.   ede:                        1.0                ok                Not Loaded
  11.   speedbar:                1.0                ok                Not Loaded
复制代码

打开cpp文件以后,信息提示只解析了c++config.h文件.
(Parsing c++config.h (LL)...done)
在semanticdb的存储位置也只有这个文件的解析数据和那个cpp文件的数据.
  1. ls ~/.emacs.d/semanticdb/
  2. !mnt!e!linux!code!include!semantic.cache
  3. !mnt!e!linux!code!semantic.cache
  4. !usr!lib!gcc!i686-pc-linux-gnu!4.4.5!include!g++-v4!i686-pc-linux-gnu!bits!semantic.cache
复制代码

.emacs文件 有关cedet的所有配置
  1. (require 'cedet)
  2. (setq semantic-default-submodes '(global-semantic-idle-scheduler-mode
  3.                                   global-semanticdb-minor-mode
  4.                                   global-semantic-idle-summary-mode
  5.                                   global-semantic-mru-bookmark-mode
  6. ))
  7. (semantic-mode 1)
  8. (global-semantic-show-parser-state-mode 1)
复制代码

刚开始也试过把gcc的类库路径添加到semantic的解析路径的列表里.不过还是不起作用.
  1. (defconst cedet-user-include-dirs
  2.   (list "."))
  3. (setq cedet-sys-include-dirs
  4.           (list "/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/g++-v4"
  5.            ;/usr/include 等等几个路径也都添加过
  6. ))
  7. (let ((include-dirs cedet-user-include-dirs))
  8.   (setq include-dirs (append include-dirs cedet-sys-include-dirs))
  9.   (mapc (lambda (dir)
  10.           (semantic-add-system-include dir 'c++-mode)
  11.           (semantic-add-system-include dir 'c-mode))
  12.         include-dirs))
  13. (setq semanticdb-default-save-directory
  14.       (expand-file-name "~/.emacs.d/semanticdb"))
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2011-9-22 15:55:08 | 显示全部楼层
cedet的使用和代码补全还是在emacser.com里问比较靠谱。个人愚见semantic配合auto-complete和yasnippet进行补全是否更方便些。

要编译cedet的话,emerge cedet即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-22 16:19:10 | 显示全部楼层
谢谢啊,我也是看了emacser.com里有关emacs23内置cedet的配置做的.
http://emacser.com/built-in-cedet.htm
cedet-version提示semantic加载正常,但是问题就出在c++ 类库解析不正常.第一个截图就是auto complete调用的semantic.
回复 支持 反对

使用道具 举报

发表于 2011-9-23 09:29:07 | 显示全部楼层
Post by cnfczn;2152587
谢谢啊,我也是看了emacser.com里有关emacs23内置cedet的配置做的.
http://emacser.com/built-in-cedet.htm
cedet-version提示semantic加载正常,但是问题就出在c++ 类库解析不正常.第一个截图就是auto complete调用的semantic.


你的测试代码呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-23 10:58:35 | 显示全部楼层
deepwhite 指的是什么测试代码?
回复 支持 反对

使用道具 举报

发表于 2011-9-23 11:30:10 | 显示全部楼层
Post by cnfczn;2152621
deepwhite 指的是什么测试代码?


呵呵,我的意思是,你用来测试 CEDET 功能的 C++ 代码。

我想试试在我这里是否能正常。

先声明,我没用内置的 CEDET, 用的 app-emacs/cedet 。内置的那个有点老,还是后面的用的舒服。
个人习惯。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-23 11:58:49 | 显示全部楼层
哦,内置的cedet是什么版本啊?
cedet-version  只显示是1.0 没写着pre几.
  1. #include<iostream>
  2. using namespace std;
  3. struct test{
  4.    int a;
  5.    int b;
  6. };
  7. int main()
  8. {
  9.      test t;
  10.      t.   //能自动补全
  11.      string str;
  12.      str. //不能自动补全
  13.      return 0;
  14. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2011-9-23 13:21:50 | 显示全部楼层
Post by cnfczn;2152627
哦,内置的cedet是什么版本啊?
cedet-version  只显示是1.0 没写着pre几.
  1. #include<iostream>
  2. using namespace std;
  3. struct test{
  4.    int a;
  5.    int b;
  6. };
  7. int main()
  8. {
  9.      test t;
  10.      t.   //能自动补全
  11.      string str;
  12.      str. //不能自动补全
  13.      return 0;
  14. }
复制代码
不知道,很早以前折腾过内置的,后来就再也不用了。
另外,这段代码我用 app-emacs/cedet , 补全没有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-23 13:51:25 | 显示全部楼层
嗯,刚也试了下app-emacs/cedet
也能正常补全,这问题真实纠结了..
回复 支持 反对

使用道具 举报

发表于 2011-9-23 13:52:27 | 显示全部楼层
Post by deepwhite;2152631
不知道,很早以前折腾过内置的,后来就再也不用了。
另外,这段代码我用 app-emacs/cedet , 补全没有问题。


你提到的 Emacser 上的那个文章我看过,但没太仔细研究。

扫了一下那个文章关于 include 设置的地方,他只是将某些目录(主要是 MinGW 的目录)添加到了
semantic-c-dependency-system-include-path 。但实际上, 如果你用的是  Linux 系统,
CEDET 中有相应的代码用于自动添加这些与编译器 (gcc) 相关的路径,你只要在 (require 'cedet) 之后添加下面的代码即可:


  1. (require 'semantic/bovine/gcc)
  2. (require 'semantic/bovine/c)
复制代码


我怀疑是你 semantic-c-dependency-system-include-path 没有设置正确。

以前我折腾内置的 CEDET 的时候,也整理过一个资料,你可以参考一下:
http://blog.163.com/vic_kk/blog/static/494705242010726297405/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表