Windows 中带有 Emacs 24.2 的 Cedet 1.1 无法解析没有扩展名的 c++ 头文件

Windows 中带有 Emacs 24.2 的 Cedet 1.1 无法解析没有扩展名的 c++ 头文件

Emacs 24.2,Cedet 1.1,Windows 7

Visual Studio 10.0 包含目录

(添加到列表'加载路径“〜/.emacs.d/cedet-1.1/common”)
(加载文件“~/.emacs.d/cedet-1.1/common/cedet.el”)

(语义加载启用过多代码助手)
(语义加载启用语义调试助手)

(需要“语义装饰包含”)

(需要“语义-ia”)

(全局 ede 模式为零)

(setq 模式本地 c 模式 semanticdb-find-default-throttle
                 '(项目本地卸载系统递归))
(setq-mode-local c++-mode semanticdb-find-default-throttle
                 '(项目本地卸载系统递归))

(语义添加系统包含“C:/Program Files/Microsoft Visual Studio 10.0/VS/Include”'c++ 模式)

当编写 C++ 程序并包含(例如)时iostream,它会导航到此包含文件,但无法解析它。另一方面,当包含(例如)时,stdlib.h它会成功解析此类包含。

如何解决这个问题?

答案1

找到了一些解决方法。需要告诉 C 词法分析器使用如下定义来解析 Microsoft 包含文件

(defun windows-semantic-hook ()
    (setq microsoft-base-dir 
        "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include")
    (add-to-list 'semantic-lex-c-preprocessor-symbol-file 
               (concat microsoft-base-dir "/crtdefs.h"))
    (add-to-list 'semantic-lex-c-preprocessor-symbol-file 
               (concat microsoft-base-dir "/yvals.h"))
    (add-to-list 'semantic-lex-c-preprocessor-symbol-file 
               (concat microsoft-base-dir "/vadefs.h"))
    (add-to-list 'semantic-lex-c-preprocessor-symbol-file 
               (concat microsoft-base-dir "/comdefsp.h"))
    (semantic-add-system-include microsoft-base-dir 'c++-mode)
    (add-to-list 'auto-mode-alist (cons microsoft-base-dir 'c++-mode)))

(add-hook 'semantic-init-hooks 'windows-semantic-hook)

现在语义解析器感觉更好了(但不是完全好)并且能够解析一些包含的内容,例如<string><map>等等。

相关内容