Emacs CEDET语义自动补全“无法找到...的类型”

3

在我转换到emacs的过程中,我发现很难放弃Visual Studio 2010用于C++开发。试图为emacs设置cedet并没有使事情变得更加容易。因此,我使用了Alex Ott的入门指南,并且我的init文件看起来与所提供的文件类似:

(load-file "~/.emacs.d/plugins/cedet/common/cedet.el")
(global-ede-mode 1)     
(semantic-load-enable-excessive-code-helpers)
(require 'semanticdb)
(global-semanticdb-minor-mode 1)
(setq semantic-ectag-program "C:/devel/ctags/ctags58/ctags.exe")
(semantic-load-enable-secondary-exuberent-ctags-support)
(require 'semantic-ia)
(require 'semantic-gcc)
(setq-mode-local c-mode semanticdb-find-default-throttle
                          '(local unloaded system recursive))
(ede-enable-generic-projects)
(global-srecode-minor-mode 1)

一切看起来都很好,但当我尝试打开一个在同一目录下有头文件(array_loader.h)的cpp文件并尝试对register_reader()方法进行代码补全时:

array_loader al; al.register_reader();

我收到了"不能找到 'array_loader al' 的类型"的错误信息。令人矛盾的是,自动补全模式可以无缝工作。它们是否互相干扰?
我刚用bazaar检出了1.1测试版,然后进行了字节编译。我没有设置任何项目,因为我所有的项目都是基于CMake构建的,并且它们没有单个包含文件路径。我的每个子库都在同一个目录中有头文件。是否有一种方法可以解析CMakeLists.txt并将该信息提供给ede或semantic?即使没有这个基本示例也应该能正常工作。我做错了什么吗?
1个回答

3

如果有人再遇到这个问题,我解决的方法是按照Alex Ott的建议设置我的cedet init文件:

https://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el

此外,我定义了我的cmake项目,并使用递归查找来浏览cmake项目文件夹以查找头文件。仍然很奇怪,即使在相同文件夹中找到了定义类/方法的标头,cpp文件对于项目外部的东西仍然无法找到签名。 semanticcdb限制如下所示:

(setq-mode-local cpp-mode semanticdb-find-default-throttle 
                      '(project local unloaded system recursive)) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接