Emacs CEDET для интерфейса OpenCV C ++ - PullRequest
4 голосов
/ 27 января 2012

Итак, я уже некоторое время пользуюсь CEDET, и в целом все работает довольно хорошо.Я перехожу от использования его с C к C ++, особенно для OpenCV 2.3 (linux), и у меня возникают проблемы.Я использую emacs24 с последней версией dev для 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)

Ответы [ 2 ]

4 голосов
/ 31 января 2012

У меня есть рабочая конфигурация; спасибо Алексу Отту и Дэвиду Энгстеру из списка рассылки cedet-devel. Чтобы отметить их исправления, в моей конфигурации были некоторые строки, которые «не нужны и, возможно, вредны». После обновления конфига, , удаления всех файлов в ~ / .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;
}
3 голосов
/ 28 января 2012

Похоже, что синтаксический анализатор не смог разобрать объявление класса - он видит его как 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)))))
...