开发环境搭建

vscode编辑远程linux系统下c/c++代码实现代码补全

2018-12-07  本文已影响114人  东东威武

当前的使用场景

在windows上远程编辑linux开发服务器下的代码,并不使用它来编译运行windows程序想用vscode作为IDE的,如果是开发windows程序建议直接下载vs。

我的问题是如果不配置好,vscode在使用的时候会各种不能代码补全,也没法查看代码定义,尤其是第三方库的代码。

最后强调下,vscode毕竟不是一个IDE,只是一个编辑器,它的代码补全还是很渣的,经成会挂掉,需要重新索引或者关掉再打开。这个不能要求太高。

为什么使用vscode

因为vscode好用,什么语言都支持。基本什么文件格式都可以,shell、makfile、python、java、cmake、markdown都可以,甚至很偏门的 NVIDA的cuda、tars的.tars都有插件。毕竟虽然是写c++代码,但还是经常要写写用到其他文件格式。

为什么不使用vs?visual studio有很多不方便。例如尽管vs2017能以目录的方式打开一个项目,不需要为Linux代码也创建.sln文件,但是没有工作区的概念,一次只能打开一个目录,而使用vscode我可以把所有相关的目录都放在一个工作区;visual studio创建的文件默认编码是GB2312,这会导致注释乱码甚至其他隐晦问题,试过不少方案都没法设置为默认utf8;最重要的是很卡,可能是远程开发的缘故,文件IO不快,visual stido的后台解析显得很卡。

vscode的插件和配置介绍

再讲具体的配置之前,先介绍下vsc的插件和配置。

vsc的插件很强大,利用插件几乎可以开发任何语言。点击左边的工具栏安装插件。

vsc的配置分为全局的用户配置和只在工作区有效的工作区配置。依次点击File->Preferences->Settings打开配置文件。

除了本身的配置,安装了插件后,有些插件也有配置。

这些配置有些可以直接在图形界面设置,有些则需要修改json文件。

第一步:准备编译器和标准库

因为我只是把vscode作为一个编辑器,并不用来编译,只需要一个库文件用来智能补全就可以了,所以实际什么编译器都可以。一共有三种方案:微软的msvcclang+mingwwindows10的linux子系统

建议先装个vs,然后再装一个WSL。

第二步:安装c/c++插件

直接搜索C/C++安装之。

如果是采用clang+mingw的方案,则还需要安装C/C++ Clang Command Adapter。

第三步:配置

首先介绍下原理及相关配置选项

方案 compilerPath intelliSenseMode
msvc 不用设置 msvc-x64
clang+mingw clang的路径 clang-x64
WSL /usr/bin/g++ gcc-x64

WSL的方案里编译器路径可以直接设置/usr/bin/g++,vscode可以自己处理。相应的,后面一些路径也可以直接使用Linux的路径,例如/usr/local/include。实际使用中发现,一旦编译器路径设置为WSL里的gcc,vsc会自动包含/usr/include下的所有文件。

所以实际配置的时候,就把这两个路径设置为自己需要添加的库目录就可以,两个一般情况都一样。

两种具体的方案:

{
    //gcc + WSL
    "C_Cpp.default.compilerPath": "/usr/bin/gcc",
    "C_Cpp.default.intelliSenseMode": "gcc-x64",

    //use clang
    // "C_Cpp.autocomplete": "Disabled",//使用clang的话可以使用clang的补全
    // "C_Cpp.default.intelliSenseMode": "clang-x64",
    //"C_Cpp.default.compilerPath": "C:/Program Files/LLVM/bin/g++.exe",

    //use msvc
    // "C_Cpp.default.intelliSenseMode": "msvc-x64",

    //cpp
    "C_Cpp.intelliSenseEngine": "Default",//不设置的话默认使用老引擎

    "C_Cpp.default.cStandard": "c11",
    "C_Cpp.default.cppStandard": "c++17",

    "C_Cpp.default.browse.path": [
        "${workspaceFolder}",
    ],

    "C_Cpp.default.includePath":
    [
        "${workspaceFolder}",
    ]
}
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceRoot}",
                "${workspaceRoot}/src/",
                "C:/include" 
            ],
            "browse": {
                "path": [
                    "${workspaceRoot}",
                    "${workspaceRoot}/src/",
                    "C:/include"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 4
}

建议一般情况采用方案2,大部分用到的库的头文件可以拷贝出来。个别主要的第三方库可以把代码包在项目里面,方便查看。但不管怎么搞,vsc的代码补全还是不理想的,别要求太高。

其他一些使用经验

上一篇下一篇

猜你喜欢

热点阅读