我正试图在Windows上用CVS为Emacs 23.1.50编译CEDET,我在"第6步:开启EDE ......"时遇到错误:"defvar:符号的变量值为void:cedet-menu-map ".CEDET 1.0pre6的编译引发了同样的错误.
我刚刚更新了我的emacs并在字节码中重新整理了一些扩展.我也通过emacs-updater更新了一些软件包,比如subversion,就像我在更新后建议的那样.但现在我得到了
Symbol's value as variable is void: cedet-menu-map
Run Code Online (Sandbox Code Playgroud)
还有更多的乐趣:如果我们削减线路装载cedet.el,欧洲央行说
error: ECB 2.40 - Error: ECB can only be used with
cedet [1.0pre6, 1.0.9]! Please install it and restart Emacs!
Run Code Online (Sandbox Code Playgroud)
CEDET-1.0.9在哪里?如果是,它在哪里?
操作系统:Gentoo
UPD:
使用包app-emacs/ecb和app-emacs/cedet解决了这个问题.
我已经搜索了emacs文档,cedet网站,并在这里徒劳无功.如果我的问题已经得到解答,可以自由地(指出现有答案)关闭它.
我正在尝试熟悉emacs中的EDE项目.到目前为止,我可以设置一个包含一个或多个文件的简单项目.
现在,我想分离一部分代码并将其打包到库中.基本上我正在努力实现与以下手写的天真Makefile相同的东西:
matrix:
g++ -c -o lib/libmatrix.o lib/matrix.cpp -std=c++0x
ar crf lib/libmatrix.a lib/libmatrix.o
num:
g++ num.cpp -Llib -Ilib -std=c++0x -o num -g
Run Code Online (Sandbox Code Playgroud)
这里我有一个由"lib/matrix.h"和"lib/matrix.cpp"组成的库(它是矩阵类型的玩具实现)和一个使用矩阵的文件"num.cpp".
我不知道如何告诉emacs正确编译矩阵.到目前为止,我得到了以下EDE项目,但当然它没有编译.
;; Object Numbers
;; EDE project file.
(ede-proj-project "Numbers"
:name "Numbers"
:file "Project.ede"
:targets (list
(ede-proj-target-makefile-program "num"
:name "num"
:path ""
:source '("num.cpp")
:compiler 'ede-g++-compiler
:linker 'ede-g++-linker
:configuration-variables 'nil
:ldflags '("-std=c++0x" "-Llib" "-Ilib")
:ldlibs '("matrix")
)
(ede-proj-target-makefile-archive "matrix"
:name "matrix"
:path "/lib"
:source '("matrix.cpp")
:compiler 'ede-g++-compiler
:linker 'ede-archive-linker
:configuration-variables 'nil
)
)
:configuration-variables 'nil
)
Run Code Online (Sandbox Code Playgroud) 我是emacs cedet用户.我得到了cedet的大力帮助.
但是,我在cedet中发现了一些错误#ifdef处理错误.不确定它是来自cedet内部还是我的错误配置.我引用了Curl中发生此问题的一些代码.
#ifdef CURL_DO_LINEEND_CONV
if((data->set.crlf) || (data->set.prefer_ascii)) {
#else
if(data->set.crlf) {
#endif /* CURL_DO_LINEEND_CONV */
endofline_native = "\n";
Run Code Online (Sandbox Code Playgroud)
使用此代码,必须存在一些错误括号匹配.因为我使用(eassist-list-methods)或其他cedet-semantic函数(跳转到定义)时出错.
我很容易猜到这可能来自#ifdef .. #endif block中的两个大括号.我承认这些是这样的.
#ifdef CURL_DO_LINEEND_CONV
if((data->set.crlf) || (data->set.prefer_ascii))
#else
if(data->set.crlf)
#endif /* CURL_DO_LINEEND_CONV */
{
endofline_native = "\n";
Run Code Online (Sandbox Code Playgroud)
在此之后,cedet语义功能运行良好.
对此有何想法?它是否来自cedet解析器问题?
如果有一点我必须在cedet配置,你能给我一些见解吗?
谢谢
我正在使用ECB和Cedet - 语义搜索引擎存储我在其缓存文件中访问的文件的标签.
我也在使用ECB的left-symboldef布局 - 它显示了光标所在标签的定义.为了做到这一点,语义打开了定义标记的文件.
问题是 - 语义几乎打开了我所有的python脚本 - 因为我已经parser在所有这些脚本中定义了 - 当我用argparse... 解析命令行参数时所以我宁愿停止语义缓存我的文件,并且这样做C-c , ,仅在我的libs上手动操作.
所以我的问题是 - 如何防止语义存储缓存?我仍然可以使用现有的数据库(我将手动收集).
我已经阅读了Alex Ott 为Emacs 提供CEDET的精彩指南,我想我知道如何正确设置我的EDE项目.
但是,当我尝试使用该命令跳转到本地符号(例如main()C++中的函数)时semantic-complete-jump-local (C-c , j),[no match]即使我从定义了符号的.cpp文件中调用此命令,我也会收到错误.
此外,当我尝试跳转semantic-complete-jump-global (C-c , J)到具有不同文件(例如多个main()函数)上的多个定义的符号时,CEDET抱怨[not unique]但它没有给我一种方法来选择我想要看到的符号.找到我感兴趣的符号的唯一方法是使用<TAB>缓冲区缓冲区遍历所有选项,直到找到我感兴趣的符号.有没有办法从我可以选择的位置获取符号列表?理想情况下,获得类似于Emacs helm(以前称为Anything)提供的自动完成列表会很棒.
这完全适用于使用CEDET 1.1的 Linux上的Emacs 24.2.1.
我正在尝试学习如何使用CEDET.我没有任何乱七八糟的项目,所以我想拍摄Emacs本身.
当我在dir中打开Emacs存储库时,CEDET似乎自动将Emacs检测为项目.但是当我这样做时M-x ede-find-file,没有文件可以打开.
问题是,如何将Emacs准确地设置为CEDET中的项目以利用EDE和CEDET的其他好东西.
似乎这方面的文档尚未完成.
我今天成功安装了cedet并且大部分都在工作; 感谢Alex Ott 对Cedet的温柔介绍.
但是我遇到了问题
当我提供相对于我正在处理的当前文件的确切路径时,自动完成工作正常.
#include "../../opensource/inc/lldp_port.h"
void test_func()
{
lldp_port port;
port.blah //here auto-completion worked fine
}
Run Code Online (Sandbox Code Playgroud)
但是我不能一直指定完整的路径(我们在办公室吃了它,它为我们生成了makefile)
#include "lldp_port.h"
void test_func()
{
lldp_port port;
port. //here auto-completion does not work :(
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
我有一个有效的EDE项目,但我想在该项目的源代码树的文件中找到该命令,而不是在我的.emacs文件中.这可能吗?
我尝试过使用目录变量和emacs加载文件,但它确实有任何影响.为此,我将以下代码放在项目根目录中的.dir-locals.el中:
((nil
. ((ede-cpp-root-project "MyProj"
:name "MyProj Project"
:file "/home/jlisee/projects/myproj_code/CMakeLists.txt"
:include-path '( "/packages" )
:system-include-path '( "/opt/myproj/local/include" )
:spp-table '( ("CONST" . "const") )
))))
Run Code Online (Sandbox Code Playgroud) 由于我使用Emacs 24,当我试图找到符号出现的位置时,我总是会收到错误semantic-symref-symbol.细节是:
semantic-symref-symbol当光标在我的源文件的某个符号上时,我按下一些键来调用,然后我得到一个列表,描述符号在*Symref缓冲区中的位置.在列表的一个条目上,我按SPACE或RETURN键,它跳转到正确的位置,但同时,Emacs弹出*Backtrace*缓冲区在其他窗口中.其内容如下:
Debugger entered--Lisp error: (void-variable last-command-char)
semantic-symref-rb-goto-match(#<overlay from 97 to 126 in *Symref stateStack>)
push-button(97)
call-interactively(push-button nil nil)
Run Code Online (Sandbox Code Playgroud)
然后我遵循semantic-symref-rb-goto-match在semantic-symref-list.el中定义的函数.elisp函数定义如下:
(defun semantic-symref-rb-goto-match (&optional button)
"Go to the file specified in the symref results buffer.
BUTTON is the button that was clicked."
(interactive)
(let* ((tag (button-get button 'tag))
(line (button-get button 'line))
(buff (semantic-tag-buffer tag))
(win (selected-window))
)
(switch-to-buffer-other-window buff)
(goto-line line)
(pulse-momentary-highlight-one-line (point)) …Run Code Online (Sandbox Code Playgroud)现在,我正在使用ede来管理我的cpp项目,我尝试在项目中快速找到一个文件,但是我失败了.我曾经ede-find-file找到"db.h",它位于"d:/projects/leveldb/include/db.h",不幸的是,它说找不到.
我的配置放在下面
(setq leveldb_root "d:/projects/leveldb/")
(ede-cpp-root-project
"leveldb"
:file (concat leveldb_root ".gitignore")
:system-include-path '("C:/Program Files/Microsoft SDKs/Windows/v7.1/Include"
"C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/include")
:include-path '("/"
"/include"))
Run Code Online (Sandbox Code Playgroud)
并且,对项目管理和文件查找解决方案有什么建议吗?(我也尝试过find-file-in-project).
我使用ede是因为我需要ede-cpp-root-project来自动设置semanticdb.