繁体   English   中英

Emacs-24自动完成跨目录头文件

[英]Emacs-24 auto-complete for cross-directory header files

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变量,该变量的类是在myadd.h从其他模块my_inc定义的。


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

  • (ede-cpp-root-project)

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

    1. 因为我有很多项目,所以这会使我的.emacs大。

    2. :include-path此处无法处理20个以上子模块的复杂标头依赖性,这使此解决方案更像是toy。 我更喜欢将配置与.emacs分开。

  • EDE项目

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

  • ede-generic-project

    如此问题的解决方案和ede-generic-project手册中所述,但出现此错误:

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

    一旦执行:

    MX ede-customize-projectRET (ede-enable-generic-projects)


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

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

如果您想保持.emacs文件的清洁并获得一些项目支持,那么最好使用通用项目类型,直到该错误开始出现为止。 在撰写本文时(2014年7月14日),该问题已在ede-ldf分支下的CEDET bzr存储库中修复,并将在不久的将来合并。

如果您有很多子模块,则还可以依赖GNU Global之类的工具。 cedet手册有一小段关于使用GNU Global的小节,其中包括帮助您查找文件的代码段。 这样,Global将跟踪您的所有标头,然后可用于查找它们。 如果所有标头都具有唯一的名称,则将一切就绪。 如果文件“ myadd.h”存在于多个位置,并且您需要根据C文件的位置选择哪个“ myadd.h”,那么您将很不走运,并且需要自定义项目类型来执行此操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM