最近我正在将我的编程环境从 CentOS 切换到 Windows。我是 Emacs 的粉丝,所以我也想用 Emacs 在 Windows 上编程。一切都进行得很顺利,但是当我使用 emacs 语义来解析系统包含时,问题就来了。
似乎emacs语义会选择解析哪个文件,哪个不解析。我指定了用于解析 emacs 的 MS Visual Studio 包含目录,但它不会。我也尝试过 MinGW 头文件,但 emacs 只解析其中的几个文件。我的 init.el 文件是这样的
(defun my-semantic-hook()
(semantic-add-system-include "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\include")
)
我不知道我是否应该在 Windows 上的 emacs 中使用 / 或 \,但似乎两者都可以。如果我使用semantic-c-describe-environment
输出是
This file’s project include is handled by:
EDE : #<ede-cpp-root-target ede-cpp-root-target>
with the system path:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
D:/WorkSpace/
This file’s system include path is:
/usr/include
c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/
可以看到我也试过用EDE来指定系统包含路径,但是也没用。但是,语义的其他功能效果很好。如果我编写#include "lib1.h"
或#include "headers/lib1.h"
使用 EDE #include <myproj/headers/lib1.h>
,它们都运行良好。但是,当涉及到 VS 包含文件或 MinGW 包含文件时,事情就会出错。我想如果语义首先检查文件,发现有问题,那么它只是跳过文件?那么我该如何解决这个问题呢?
现在问题有了新的进展。我已经尝试使用 SDL2 库在我的旧项目中使用语义。在我为 EDE 编写项目配置并打开其中一个源文件后,发生了一些事情。语义解析一些系统包含的文件,如 stdio.h。然后我可以通过语义跳转到它。
然后我使用 iostream 尝试了另一个文件。然而语义仍然没有解析它。但是我可以使用C-c , u
命令跳转到文件并手动调用语义来解析它。然后我使用 iostream 回到我的原始文件,使用语义的公司后端现在可以很好地工作。
所以现在我可以确保问题在于语义不解析文件本身。也许是因为它只解析文件名末尾带有 .h 或 .c 的文件?但是在 linux 上它适用于像 iostream 这样的文件,为什么在 windows 上它不会呢?如何解决?