我的emacs版本是23.2.1虽然我使用以下内容来更改后端以使用GTAGS.(需要'semantic/db-global)(semanticdb-enable-gnu-global-databases'c-mode)(semanticdb-enable-gnu-global-databases'c ++ - mode)我试着生成一个GTAGS文件用作语义的后端.但是,每次打开C文件时,Semantic仍然在不使用GTAGS文件的情况下解析文件.
是否可以使用GTAGS文件而不是内置的语义解析器?我发现内置的解析器不是很准确.
是否可以在不指定项目范围的情况下使用GTAGS文件?在我的情况下,我试图将GTAGS文件放在/ usr/include中,这应该是emacs的标准包含路径.但是语义学并没有使用它.
如何在不破坏语义和自动完成的情况下集成SCons和emacs + cedet?
我一直在尝试为C++设置一个EDE项目(emacs24 +内置CEDET),我开始变得绝望,因为我似乎无法找到我希望生成makefile的方式.我对Emacs比较陌生.我会试着描述一下我在做什么:
我有一个像这样的玩具项目:
main.cpp
other/
Utils.cpp
Utils.h
CGrabBuffer.cpp
CGrabBuffer.h
Run Code Online (Sandbox Code Playgroud)
main.cpp在"other /"目录中包含.h's.以下是使用此简单目录设置设置EDE项目的步骤:
M-x ede-new; 类型:Make; 姓名:main-proj.M-x ede-new; 类型:Make; 姓名:aux-proj.M-x ede-new-target; 名称:main; 类型:program.出现提示时,我将main.cpp添加到此目标.M-x ede-customize-current-target所有三个目标,然后添加一些包含路径,一些库等.M-x ede-compile-project它不会编译,因为:
正如你所看到的,我正处于一团糟之中.也许我甚至不理解EDE中"目标"的含义.我还读到了ede-cpp-root-project的存在,它必须在.emacs文件中指定.我没有尝试过,因为我认为它只是帮助语义.它不会生成Makefile,是吗?我是否可以(或者我需要)使用Project.el构建的EDE项目和使用ede-cpp-root-project进行语义相同的事情?还是多余的?
抱歉,如果我误解了很多东西,但我很困惑,对emacs不熟悉会让事情变得更糟.谢谢你的耐心!
编辑:通过一些修补和我收到的回复,我已经能够找出很多东西,所以非常感谢.我还不明白的是使用ede-cpp-root-project,它必须在.emacs文件中指定.它只是用于c ++语义吗?使用Project.el的项目和.emacs中的elisp行是否是多余的?
我是Emacs的新手,我将以下代码作为示例.我安装了GNU Emacs 23.1.1(i386-mingw-nt6.1.7600),安装了cedet-1.0pre7.tar.gz.,安装ELPA和公司.您可以在底部找到我的简单Emacs配置.
问题是,当我在main()中输入q [0]并按下时.(点),我看到向量的37个成员,而不是Person,虽然first_name和last_name是预期的.完成在函数greet()中按预期工作,但它与vector无关.
我的问题是,我如何才能完成向量元素的代码完成?
#include <iostream>
#include <vector>
using namespace std;
class Person
{
public:
string first_name;
string last_name;
};
void greet(Person a_person)
{
// a_person.first_name is completed as expected!
cout << a_person.first_name << "|";
cout << a_person.last_name << endl;
};
int main()
{
vector<Person> q(2);
Person guy1;
guy1.first_name = "foo";
guy1.last_name = "bar";
Person guy2; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个大型的c ++项目.我在过去的六个月里一直在使用emacs.我尝试配置CEDET以便能够轻松导航但我发现了一些问题.
1.-有时语义不会找到一些符号,有时候他不会...我不清楚哪些文件是语义索引.我曾尝试使用EDE(按照本文中的说明http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html),但我也发现了一些问题......
2.-前段时间我正在使用vim + cscope,我记得有一种方法可以在符号堆栈中导航回来(Ctrl-t).在emacs中有这样的东西吗?
PD>一些数据使问题更加清晰.
我有同一个项目的多个版本.每个人都有自己的根目录.每个项目都有多个模块,每个模块都在一个子目录中.每个模块都有头文件.
/home/user/
|
\Release-001
| |
| \makefile
| \ Module-001
| | |
| | \makefile
| | \subdir-001
| | | \header-001.h
| | | \header-002.h
| | \subdir-002
| | | \header-003.h
| \ Module-002
| | |
| | \makefile
| | \subdir-003
| | | \header-004.h
| | | \header-005.h
| | \subdir-004
| | | \header-006.h
|
\Release-002
| |
| \makefile
| …Run Code Online (Sandbox Code Playgroud) 我想摆脱上面的下划线功能,例如,如上面的"无效"屏幕截图所示:
http://cedet.sourceforge.net/img-gen/semantic-ia-complete-menu.png
我在文档中找不到任何明显的东西,但是,我甚至不知道首先要搜索什么.("功能标记","下划线",......)
我设置了这样的cedet:
;; cedet
(require 'semantic)
(require 'semantic/sb)
(require 'srecode)
(global-ede-mode 1)
(semantic-mode 1)
(global-semanticdb-minor-mode 1)
(global-semantic-idle-scheduler-mode 1)
(global-semantic-idle-completions-mode 1)
(global-semantic-decoration-mode 1)
(global-semantic-highlight-func-mode 1)
(global-semantic-stickyfunc-mode -1)
(global-semantic-idle-summary-mode 1)
(global-semantic-mru-bookmark-mode 1)
(semanticdb-enable-gnu-global-databases 'c-mode)
(semanticdb-enable-gnu-global-databases 'c++-mode)
(set-default 'semantic-case-fold t)
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
谢谢,马里奥
看完之后:
我了解到,在创建包含现有make文件和源代码的项目文件夹时,我可以通过以下任一方式对文件进行语义索引:
定义一个简单的EDE项目:
(ede-cpp-root-project ... :system-include-path '( "~/exp/include/boost_1_37" )
或者通过直接指定包含语义的路径
(semantic-add-system-include "~/exp/include/boost_1_37" 'c++-mode)
但这仍然需要我手动输入路径.有没有办法include从现有的make文件中自动提取语义路径?
背景:
某些IDE具有从现有make文件自动发现 gcc -I路径的功能.例如,在Eclipse中,您可以在具有现有make文件和源代码的路径上创建项目,Eclipse将在构建项目时推断其"intellisense"的包含路径(我假设Eclipse将GNU make的输出解析为做这个).我想在Emacs中做同样的事情.
我正在尝试在Emacs 24.3中设置CEDET 2.2来为我提供自动完成功能,使用"对cedet的温和介绍",但它并不完全想按照我想要的方式工作.
首先,我尝试使用CEDET自己的完成,但是那个没有提供"弹出菜单",只有它能找到的第一个完成,并且没有办法循环.然后我安装了自动完成包,并按照页面上的描述进行设置.这也行不通 - 自动完成崩溃说auto-complete error: (void-variable ac-source-semantic).ac-source-gtags也是如此.
这是不可能的,因为目前有缺陷的CEDET,还是我错误配置了它?
我从这个问题中了解到,CEDET安装在emacs 24中而无需额外安装,所以我不需要在这里遵循这些说明,也不需要在此处遵循CEDET部分.
我没有使用emacs入门套件,就像这个答案一样.
所以,当我使用elpa安装ecb时,我收到以下错误:
Compiling file /home/mittenchops/.emacs.d/elpa/ecb-20131116.1319/ecb2/jn-file-tree.el at Mon Dec 30 16:13:57 2013
Entering directory `/home/mittenchops/.emacs.d/elpa/ecb-20131116.1319/ecb2/'
jn-file-tree.el:31:1:Error: Cannot open load file: jn-tree-node
Compiling file /home/mittenchops/.emacs.d/elpa/ecb-20131116.1319/ecb2/jn-tree-node.el at Mon Dec 30 16:13:57 2013
jn-tree-node.el:32:1:Error: Cannot open load file: jn-utils
Compiling file /home/mittenchops/.emacs.d/elpa/ecb-20131116.1319/ecb2/jn-tree-view.el at Mon Dec 30 16:13:57 2013
jn-tree-view.el:31:1:Error: Cannot open load file: jn-window
Compiling file /home/mittenchops/.emacs.d/elpa/ecb-20131116.1319/ecb2/jn-utils.el at Mon Dec 30 16:13:57 2013
Compiling file /home/mittenchops/.emacs.d/elpa/ecb-20131116.1319/ecb2/jn-window.el at Mon Dec 30 16:13:57 2013 …Run Code Online (Sandbox Code Playgroud) 我了解到CEDET内置于我安装的emacs 24.3.1中.不幸的是,所有在线教程都会指导您安装CEDET并为您提供引用和加载已安装的软件包和文件的配置文件.
如何配置内置CEDET并在不进行任何外部安装的情况下使用它?我不知道如何利用内置版本.
cedet ×10
emacs ×10
c++ ×2
emacs-ecb ×2
autocomplete ×1
elisp ×1
elpa ×1
emacs24 ×1
gcc ×1
gnu-global ×1
intellisense ×1
makefile ×1
scons ×1
stdvector ×1