【问题标题】:Emacs-24 auto-complete for cross-directory header files跨目录头文件的 Emacs-24 自动完成
【发布时间】:2014-08-09 04:17:36
【问题描述】:

auto-complete 不适用于具有多个模块的 Emacs C++ 项目。每个子模块所依赖的头文件既存在于模块本身中,也存在于其他模块中。换句话说,一个模块可能包含另一个模块的头文件。

下面是我的示例源代码:

.
├── CMakeLists.txt
├── my_inc
│   ├── CMakeLists.txt
│   ├── myadd.cpp
│   └── myadd.h
├── README.md
└── src
    ├── CMakeLists.txt
    ├── Hello.java
    ├── helper.cpp
    ├── helper.h
    └── main.cpp

main.cpp

#include "myadd.h"
#include "helper.h"
int main() {
  MyAdd add_obj;
  Helper h;
  h.toString();   // Auto-complete works since Helper is in the same directory. 
  add_obj.        // Auto-complete for add_obj does not work
                  // because myadd.h is in another directory (my_inc).
}

当我在h之后键入.时弹出方法列表,但对于变量add_obj没有,其类在其他模块my_inc中定义在myadd.h中。


我尝试了一些解决方案(CEDET 相关):

  • (ede-cpp-root-project)

    此解决方案在这里有效。我不想申请这个,因为

    1. 这会让我的.emacs 变大,因为我有很多项目。

    2. :include-path 这里无法处理 20+ 子模块的复杂头依赖,这使得这个解决方案更像玩具。我更喜欢将配置与 .emacs 分开。

  • EDE 项目

    我通过 ede-new 和 c c 创建项目和目标。 t,但这仅用于编译而不是名称,方法自动完成。

  • ede-generic-project

    this questionmanual on ede-generic-project 的解决方案中所述,但我收到此错误:

    eieio-oref:错误类型参数:(或 eieio-object-p class-p),nil

    一旦我执行:

    M-x ede-customize-project RET(ede-enable-generic-projects) 之后。


环境:我使用 Emacs 24.3 并安装了auto-completecedet2.0

【问题讨论】:

    标签: c++ emacs autocomplete cedet


    【解决方案1】:

    解决涉及项目、头文件和完成的问题时,第 1 步是启用(global-semantic-decoration-mode 1),其中包括在找不到头文件时以红色突出显示头文件的机制。这有助于快速解决配置问题。

    如果您想保持 .emacs 文件干净并获得一些项目支持,那么通用项目类型是一个不错的选择,直到该错误开始出现。在撰写本文时(2014 年 7 月 14 日),该问题已在 ede-ldf 分支下的 CEDET bzr 存储库中修复,并且很快就会合并。

    如果你有很多子模块,你也可以依赖像 GNU Global 这样的工具。 cedet 手册有一个关于使用 GNU Global 的简短部分,其中包括帮助它定位文件所需的 sn-p。这样,Global 将跟踪您的所有标题,然后可用于查找它们。如果您所有的标题都有一个唯一的名称,那么您将全部设置好。如果文件“myadd.h”存在于多个位置,并且您需要根据 C 文件所在的位置选择哪个“myadd.h”,那么您将不走运,并且需要自定义项目类型来执行此操作。

    每次配置更改后,您都需要使用要找到的标头对缓冲区进行强制重新解析,以便刷新缓存。使用C-u M-x bovinate RET强制。

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2023-03-15
      • 2014-08-08
      • 2011-08-05
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多