使用emacs语义与ede和company-mode来完成和导航

时间:2017-06-26 05:28:16

标签: c++ emacs

我按照http://tuhdo.github.io/c-ide.html#orgheadline33教程使用emacs构建了一个c / c ++ IDE。

但是我在使用语义来完成公司模式和导航时遇到了问题。问题在于,当我试图告诉语义其他库或代码在哪里使用semantic-add-system-include时,它只适用于c ++包含。

如果我添加(semantic-add-system-include "~/mylib"),语义将不会解析〜/ mylib中的文件,因此公司将无法工作。但如果我使用(semantic-add-system-include "/usr/include/c++/4.5.2/"),这将有效。如何使其与其他代码或标题一起使用?

我也尝试过使用EDE。我的项目目录是这样的:

/project root  
    /lib1  
    /lib2   

我试过

(ede-cpp-root-project "myproject"
                      :file "/home/user/myproject/Makefile"
                      :include-path '("/lib1"
                                      "/lib2")
                      )

(ede-cpp-root-project "myproject"
                      :file "/home/user/myproject/Makefile"
                      :system-include-path '("/home/user")
                      )

然而,当我输入

#include <myproject/lib1/xx.h>

在我的源文件中,语义不会解析正确的文件并提供完整的候选文件。

我只想在键入#include <myproject/lib1/xx.h>时语义解析正确的文件。我可以用语义或/和EDE实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

我的semantic-mode-hook中有以下内容。变量semantic-dependency-system-include-path是模式本地的。请尝试在以下内容中重新定义your-c-include-dirsyour-c++-include-dirs

(defun your-semantic-hook ()
  ;; these are buffer-local
  (mapc (lambda (dir)
          (semantic-add-system-include dir 'c-mode))
        your-c-include-dirs)
  (mapc (lambda (dir)
          (semantic-add-system-include dir 'c++-mode))
        your-c++-include-dirs))

(add-hook 'semantic-mode-hook 'your-semantic-hook)