2012-01-27 57 views
4

因此,我现在已经使用了CEDET一段时间,而且一般情况下它的工作情况非常好。 我正在从使用C到C++,特别是OpenCV 2.3(linux),我遇到了问题。我正在使用emacs24和最新的CEDET开发版。用于OpenCV C++接口的Emacs CEDET

这是无法解析某些符号及其成员,如:KeyPoint, Mat,

许多功能符号但是被解析,如line(), imshow(), imread()

我在寻求帮助如何调试我的设置有什么问题,或者成功安装opencv C++ api的人。

这里是我的相关CEDET配置:

;; brian-cedet.el 
;; Contains my personal configuration for CEDET 

;; Loads for CEDET 
(load-file "/home/terranpro/code/cedet/common/cedet.el") 

(add-to-list 'Info-default-directory-list 
      (expand-file-name "~/code/cedet/common")) 
(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/common")) 

(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/semantic/doc")) 
(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/eieio")) 
(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/speedbar")) 
(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/cogre")) 
(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/ede")) 
(add-to-list 'Info-directory-list 
      (expand-file-name "~/code/cedet/srecode")) 

(require 'ede) 

(global-ede-mode t) 

;;(semantic-load-enable-minimum-features) 
(semantic-load-enable-code-helpers) 
;;(semantic-load-enable-gaudy-code-helpers) 
(semantic-load-enable-excessive-code-helpers) 
;;(semantic-load-enable-semantic-debugging-helpers) 

(require 'semantic-ia) 

(require 'semantic-gcc) 

(require 'semantic-sb) 

(require 'semanticdb) 
(global-semanticdb-minor-mode 1) 

(require 'semanticdb-global) 
(semanticdb-enable-gnu-global-databases 'c-mode) 
(semanticdb-enable-gnu-global-databases 'c++-mode) 

(require 'semantic-c) 

(setq semantic-load-turn-useful-things-on t) 

(semantic-add-system-include "/usr/include/glib-2.0" 'c-mode) 
(semantic-add-system-include "/usr/include/glib-2.0" 'c++-mode) 
(semantic-add-system-include "/usr/include/gtk-3.0" 'c-mode) 
(semantic-add-system-include "/usr/include/gtk-3.0" 'c++-mode) 

(semantic-add-system-include "/usr/local/include/" 'c-mode) 
(semantic-add-system-include "/usr/local/include/" 'c++-mode) 

(semantic-add-system-include "/usr/local/include/opencv" 'c-mode) 
(semantic-add-system-include "/usr/local/include/opencv2" 'c++-mode) 
(semantic-add-system-include "/usr/local/include/opencv" 'c-mode) 
(semantic-add-system-include "/usr/local/include/opencv2" 'c++-mode) 

(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
     '"/usr/local/include/opencv2/core/types_c.h") 
(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
     '"/usr/local/include/opencv2/imgproc/types_c.h") 

(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_PROP_RW" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_EXPORTS" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_EXPORTS_W_SIMPLE" . "")) 

(defun my-cedet-hook() 
    (local-set-key [(control return)] 'semantic-ia-complete-symbol) 
    (local-set-key "\C-c?" 'semantic-ia-complete-symbol-menu) 
    (local-set-key "\C-c>" 'semantic-complete-analyze-inline) 
    (local-set-key "\C-c=" 'semantic-decoration-include-visit) 
    (local-set-key "\C-cj" 'semantic-ia-fast-jump) 
    (local-set-key "\C-cq" 'semantic-ia-show-doc) 
    (local-set-key "\C-cs" 'semantic-ia-show-summary) 
    (local-set-key "\C-cp" 'semantic-analyze-proto-impl-toggle) 
    (local-set-key "\C-c+" 'semantic-tag-folding-show-block) 
    (local-set-key "\C-c-" 'semantic-tag-folding-fold-block) 
    (local-set-key "\C-c\C-c+" 'semantic-tag-folding-show-all) 
    (local-set-key "\C-c\C-c-" 'semantic-tag-folding-fold-all)) 
(add-hook 'c-mode-common-hook 'my-cedet-hook) 
(add-hook 'emacs-lisp-mode-hook 'my-cedet-hook) 
(add-hook 'lisp-interaction-mode-hook 'my-cedet-hook) 

(global-semantic-tag-folding-mode 1) 
+0

你能提供例如,如何包括报头,等等? – 2012-01-27 15:58:59

回答

4

我有一个工作配置现在;感谢cedet-devel邮件列表中的Alex Ott和David Engster。要注意他们的修正,我的配置中有一些“不需要,可能会伤害”的行。更新配置后,删除〜/ .semanticdb中的所有文件并重新启动emacs,事情就像预期的那样工作!

我还包括一个示例cpp文件来测试配置。多谢你们!

(load-file "/home/terranpro/code/cedet/common/cedet.el") 

(require 'ede) 

(global-ede-mode t) 

;;(semantic-load-enable-minimum-features) 
(semantic-load-enable-code-helpers) 
;;(semantic-load-enable-gaudy-code-helpers) 
(semantic-load-enable-excessive-code-helpers) 
;;(semantic-load-enable-semantic-debugging-helpers) 

;; CEDET-devel mailing list said these werent needed 
;; and possibly hurtful 
;;(require 'semantic-ia) 

;;(require 'semantic-gcc) 

;;(require 'semantic-sb) 

;;(require 'semanticdb) 
;;(global-semanticdb-minor-mode 1) 

;;(require 'semanticdb-global) 

(semanticdb-enable-gnu-global-databases 'c-mode) 
(semanticdb-enable-gnu-global-databases 'c++-mode) 

(require 'semantic-c) 

(setq semantic-load-turn-useful-things-on t) 

(semantic-add-system-include "/usr/local/include/" 'c-mode) 
(semantic-add-system-include "/usr/local/include/" 'c++-mode) 

(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
     '"/usr/local/include/opencv2/core/types_c.h") 
(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
     '"/usr/local/include/opencv2/imgproc/types_c.h") 

(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_PROP_RW" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_EXPORTS" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_EXPORTS_W_SIMPLE" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_EXPORTS_W" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_EXPORTS_W_MAP" . "")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-map '("CV_INLINE" . "")) 

(defun my-cedet-hook() 
    (local-set-key [(control return)] 'semantic-ia-complete-symbol) 
    (local-set-key "\C-c?" 'semantic-ia-complete-symbol-menu) 
    (local-set-key "\C-c>" 'semantic-complete-analyze-inline) 
    (local-set-key "\C-c=" 'semantic-decoration-include-visit) 
    (local-set-key "\C-cj" 'semantic-ia-fast-jump) 
    (local-set-key "\C-cq" 'semantic-ia-show-doc) 
    (local-set-key "\C-cs" 'semantic-ia-show-summary) 
    (local-set-key "\C-cp" 'semantic-analyze-proto-impl-toggle) 
    (local-set-key "\C-c+" 'semantic-tag-folding-show-block) 
    (local-set-key "\C-c-" 'semantic-tag-folding-fold-block) 
    (local-set-key "\C-c\C-c+" 'semantic-tag-folding-show-all) 
    (local-set-key "\C-c\C-c-" 'semantic-tag-folding-fold-all)) 
(add-hook 'c-mode-common-hook 'my-cedet-hook) 
(add-hook 'emacs-lisp-mode-hook 'my-cedet-hook) 
(add-hook 'lisp-interaction-mode-hook 'my-cedet-hook) 

(global-semantic-tag-folding-mode 1) 

和自备电厂的测试文件:

#include <stdio.h> 
#include <vector> 
#include <string> 
#include <opencv2/opencv.hpp> 
#include <opencv2/core/core.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/features2d/features2d.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace cv; 
using namespace std; 

int main(int argc, char **argv) 
{ 
    KeyPoint k; 
    Mat m; 

    // m should have members like m.clone() 
    // k has members like k.pt (Point2f pt) 

    return 0; 
} 
3

它看起来像,语义分析器无法分析类的声明 - 它把它看作CV_EXPORTS Mat不是Mat本身虽然CV_EXPORTS应扩展到空字符串。我使用了下面的配置,它对C代码很好,但对C++不适用。我建议你写CEDET-devel邮件列表与实例 - 只是写在那里,如果有必要,我会为你的邮件更多评论...

(ede-cpp-root-project "OpenCV/C++ test" 
    :name "OpenCV/C++ test" 
    :file "/Users/ott/development/opencv-examples/cpp/CMakeLists.txt" 
    :include-path '("/" 
       ) 
    :system-include-path '("/opt/local/include" 
        "/opt/local/include/opencv" 
        "/opt/local/include/opencv2") 
    :spp-table '(
        ("CV_PROP_RW" . "") 
        ("CV_EXPORTS" . "") 
        ("CV_EXPORTS_W_SIMPLE" . "") 
       ("CV_EXPORTS_W" . "") 
       ("CV_EXPORTS_W_MAP" . "") 
       ("CV_INLINE" . "")) 
    :local-variables (list 
       (cons 'semantic-lex-c-preprocessor-symbol-file 
       (cons "/opt/local/include/opencv2/core/types_c.h" 
        (cons "/opt/local/include/opencv2/imgproc/types_c.h" 
        semantic-lex-c-preprocessor-symbol-file))))) 
+0

谢谢亚历克斯!我已经联系了cedet-devel名单,并且正在急切地等待援助。如果/当解决方案可用时,我会更新此问题。 – assem 2012-01-30 06:06:09