Sublime使用EasyClangComplete插件写代码时,如果你的文档目录或它的上层目录下有一个CMakeLists.txt文件,那么插件会去调用cmake命令编译这个文件。如果系统没有装cmake或者cmake编译出错,就会导致编辑器本身出现一些奇怪的现象,比如:
- #include无法弹出quick panel选取头文件
- 选择文本后键入双引号无法自动前后包住文本,而是会将其删掉
这是在EasyClangComplete的配置文件中规定的:
要修复这个问题,除了直接把配置文件注释掉,还有以下方案:
- 安装CMake,使插件能够调用cmake命令
- (针对custom的编译环境)修改cmake命令参数,以符合本机环境
CMake的安装直接去官网下载安装包即可,略过。
针对非标准的编译环境,比如在windows下不使用msvc,而是mingw,还需要向cmake命令指定合适的编译参数,不然会弹出如下找不到nmake的报错:
Error in file:
PATH\CMakeLists.txt
-- Building for: NMake Makefiles
CMake Error at CMakeLists.txt:5 (project):
Running
'nmake' '-?'
failed with:
系统找不到指定的文件。
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
指定cmake编译器的方式在命令行中如下:
cmake -G "MinGW Makefiles"
在EasyClangComplete中,需要修改对应的配置文件:
"flags_sources": [
{
"file": "CMakeLists.txt",
"flags": ["-GMinGW Makefiles"] // 增加部分
},
{"file": "compile_commands.json"},
{"file": "CppProperties.json"},
{"file": "c_cpp_properties.json"},
{"file": ".clang_complete"},
],
注意在插件官方文档中flag名字为ecc_flags_sources
,可能是旧版本的名字未更新,实际应该没有ecc_
前缀。另外这里是复制了插件默认配置中的内容,写到了对应的user配置中,养成尽量不动原配置文件的好习惯。
实测不能像命令行中一样,写成"flags": ["-G \"MinGW Makefiles\""]
,会产生报错,原因未知。
最后可能还会遇到如下问题:
Error in file:
PATH\CMakeLists.txt
CMake Error: Error: generator : MinGW Makefiles
Does not match the generator used previously: NMake Makefiles
Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory.
这是由于插件自己生成的缓存文件CMakeCache.txt和更新后的编译器参数相冲突,手动删除CMakeCache.txt即可。用everything软件搜索该文件,发现在以下路径:
C:\Users\【用户名】\AppData\Local\Temp\EasyClangComplete\cmake_builds\xxx
将该路径下的内容全部删去,下次插件就会重新从头开始按照正确的编译器参数生成所需文件了。到此为止问题应该得到解决。
Tip: 利用EasyClangComplete的verbose选项,在上面对插件进行debug的时候可以显示更多信息:
"verbose" : true,
所有的调试信息都是在sublime console中显示的,调出方式如下:
在上面的图标处右键选择console:
或者在菜单栏View->Show Console也可以。