Emacs CEDET用于OpenCV C++;接口
所以,我已经使用CEDET有一段时间了,总体来说,它运行得很好。 我正从C到C++使用它,特别是针对OpenCV 2.3(Linux),我遇到了问题。我正在将emacs24与最新的CEDET开发版本一起使用 它无法解析某些符号及其成员,如:Emacs CEDET用于OpenCV C++;接口,emacs,opencv,cedet,Emacs,Opencv,Cedet,所以,我已经使用CEDET有一段时间了,总体来说,它运行得很好。 我正从C到C++使用它,特别是针对OpenCV 2.3(Linux),我遇到了问题。我正在将emacs24与最新的CEDET开发版本一起使用 它无法解析某些符号及其成员,如:KeyPoint、Mat、等 但是,许多函数符号都会被解析,例如line()、imshow()、imread()等 我正在寻找如何调试我的安装程序的错误,或者是谁成功地设置OpenCV C++ API。 以下是我的相关cedet配置: ;; brian-ced
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)
看起来,语义解析器无法解析类声明-它将其视为
CV_导出Mat
而不是Mat
本身,尽管CV_导出
应该扩展为空字符串。我使用了以下配置,它对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)))))
我现在有一个工作配置;感谢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)
和CPP测试文件:
#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main(int argc,字符**argv)
{
关键点k;
matm;
//m应该有像m.clone()这样的成员
//k的成员类似于k.pt(Point2f-pt)
返回0;
}
能否提供示例,说明如何包含标题等?谢谢Alex!我已经联系了cedet-devel名单,并急切地等待援助。如果有解决方案,我将更新此问题。