Linux && Windows 平台下配置 VS Code + C/C++ 语言学习、开发环境。
我们知道,配置 VSCode 多重开发环境,就是组合安装配置多种语言相关插件以及相关语言工具库 的过程。
下面正式开始在 VS Code 中配置 C/C++ 开发、调试环境(For Windows && Linux):
Extensions Setup 首先,需要安装 VSCode 中 C/C++ 开发过程中可能会用到的插件 >>>>
1 –> 必须安装的扩展:
C/C++ :实际上就是指 cpptools,提供 C/C++ 语言支持,包括智能提示和调试功能等。
推荐 安装插件:C/C++ Extension Pack –> Popular extensions for C++ development in Visual Studio Code(插件合集包,包含了所有 C/C++ 开发中可能用到的流行插件)。
2 –> 其他可选扩展:
3 –> 不建议/不需要装的扩展:
创建 C/C++ 工程文件夹 我们知道,VScode 是以文件夹的形式来组织管理工程项目的。
故,首先你需要创建一个用来存放整个工程代码的文件夹也被称为 【工作目录】,这里我的为:CppProjectWSC 。
注意:工作目录路径中不能含有中文和空格和引号 。
然后通过 VSCode 打开该文件夹【File –> Open Folder 或使用快捷键 Ctrl + K + O】,选择刚才创建的那个文件夹即可。
事实上,此时你就可以将 VSCode 作为编辑器进行 C/C++ 源码学习和编写了。
Reffs Configuration 打起精神,重点来了…. 如果你只是将 VSCode 作为一个编辑器使用,那么上述就够了,当然这不是我们的目的。
再一次重申:VS Code 只是一个编辑器,并不是 IDE。
我们的目的是:想要在 VSCode 中直接使用 Code Runner 进行 C/C++ 代码的编写测试或者完成代码的 Debug(断点测试)功能,那么你还需要进行额外的配置。
需要配置那些???
配置一个 C/C++ 编译器 :你需要确定当前系统环境下确保有一个可以用来编译 C/C++ 的编译器;
配置工程文件夹 :你需要使用 VSCode 设置规则在工程文件夹中进行一些配置,以可以帮助我们完成一键构建(编译、链接等)、运行……
但由于编译器以及 VSCode 中的配置,在不同平台(Windows & Linux)下的具体细节存在一定的差异,下面将分为两部分内容分别介绍:
你可以直接选择你关注平台的配置,这两部分内容是独立完整的。
For Windows 先进行 Windows 平台下 C/C++ 编译器的选择,安装以及配置:
配置 C/C++ 编译器:MinGW-w64 MinGW-w64 的全称是:Minimalist GNU on Windows-win64bit,是 GCC 的 Windows 64bit 版本,可以编译生成 64bit 或 32bit 可执行程序。并且 MinGW-w64 是稳定可靠的、持续更新的 C/C++ 编译器,值得信赖!
所以,这里选择安装以及配置 MinGW-w64 作为 Window 平台下 C/C++ 的编译器。当然,你也选择配置其它 C/C++ 编译器,如:Clang 等。
1.1 –> Download Package
这里先给出 MinGW-w64 的托管网站,通过这里 >>>> 传送门 你可以获得其安装包。
这里提供两种安装方式:
在线安装器方式安装:MinGW-W64 Online Installer
某版本的现成安装包方式安装:例如,x86_64-posix-seh ,版本选择可参看下文 1.2.1 中版本选择说明。
下载过程中可能由于网络问题导致安装包无法下载,例如,下载页面已经跳转但没有跳出下载安装包保存窗口,这时你可以尝试:
等待网络变好后,重新刷新网页;
寻找 【mirror】 或者 【Problems Downloading?】 选择一个较近的镜像网站,可能会获得较高(无法保证)的下载速度;
基于上述两种尝试,两种安装方式对应的安装链接都尝试下
1.2 –> Begin To Setup
分别来看两种安装方式:
1.2.1 –> 在线安装器方式进行安装
安装选项:
选项说明:
名称
解释
可选项
说明
选择建议
Version
版本号
无需求选择最新
Architecture
架构
i686, x86_64
64位系统选择 x86_64, 32位系统选择 i686
x86_64
Threads
线程模式
posix, win32
Windows 平台选 win32, 其它选 posix
win32
Exception
异常处理
x86_64:sjlj,seh; i686:sjlj,dwarf
sjlj同时支持32bit & 64bit,稳定性好;seh 和 dwarf 只分别支持 64bit,32bit,但性能好
seh
Build revision
构建版本号
0
【Next】 之后,你可以自定义 MinGW-w64 的安装目录。
下面来看第二种安装方式 >>>>
1.2.2 –> 某版本的现成安装包方式安装
下载相应的安装包,具体版本选择可参考上表,选择合适位置解压(保证路径中没有空格的目录)即可。
1.3 –> Config Envs-Vars
MinGW-w64 安装好之后,需要检查是否已添加环境变量。
你可以尝试如下命令判断是否已经自动添加了环境变量(DOS):
如果没有 g++
的版本输出信息,说明需要添加环境变量:
将 MinGW-w64 安装包目录下的 bin
文件夹添加至系统环境变 PATH 中 ↓↓↓↓↓↓
添加后查看(g++ && gcc):
1 2 3 4 5 6 7 8 9 10 11 > g++ --version g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > gcc --version gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
至此,C/C++ 编译器:MinGW-w64 的安装以及配置已经完成了~~~
解决了编译器的问题后,接着看如何完成后续的 VSCode 配置: >>>>
配置工程文件夹 前面提到过,需要使用 VSCode 设置规则在工程文件夹中进行一些配置,以可以帮助我们完成一键构建(编译、链接等)、运行……
事实上,这总共会涉及到 4 个配置文件:
1 2 3 4 5 6 7 8 9 10 11 # launch.json # tasks.json # settings.json # c_cpp_properties.json > >> 注意: # VSCode 单次运行一个脚本视为一个 task,相应任务的配置文件为 tasks.json; # settings.json 为上面我们创建的工程文件夹(工作区,CppProjectWSC)的配置文件; # launch.json 是调试环境的配置文件; # c_cpp_properties.json 主要是用来配置 C/C++ 引用库路径的。
在开始 【launch.json & tasks.json & settings.json & c_cpp_properties.json】 配置之前,你应该知道:
你可以选择直接在当前工程文件夹(CppProjectWSC)下创建一个 .vscode
文件夹,作为工程文件夹的环境配置目录,随后直接创建空白的上述四个文件,然后贴入你的配置内容,这是允许的。
但我们 不建议采用这种直接创建的方式,VSCode 直接提供了自动生成的方法 ,自动生成后你只需要修改或者添加一些你需要的配置就可以了。
2.1 –> Go Start
我们将从 VSCode 中的 Debug(爬虫)功能入手,来完成整个配置过程。并且熟悉 VSCode 中 C/C++ 代码的编译、运行以及断点调试。
首先,点击“爬虫”按钮(或 Ctrl + Shift + D),打开 VSCode 中的 Debug(C/C++ 编译调试)界面观察一下:
下面正式开始配置 gcc 和 g++ 分别用于编译 C 和 C++:
2.1.1 –> C 语言配置
开始配置之前,先给出一个 C 的实例代码方便后续的配置以及环境测试。在工程文件夹 CppProjectWSC 下创建一个名为 cTest.c
的 C 源码文件,内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main (int argc, char const *argv[]) { printf ("Welcome to use VS Code.\n" ); printf ("This is a debug test.\n" ); return 0 ; }
此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C 的代码了:
1 2 3 [Running] cd "e:\VSCodeWorkS\CPPProjectWSC\" && gcc cTest.c -o cTest && "e:\VSCodeWorkS\CPPProjectWSC\"cTest Welcome to use VS Code. [Done] exited with code=0 in 0.684 seconds
完美~~~
继续 ↓↓↓↓↓
2.1.1-1 –> 配置调试设置
【Ctrl + Shift + D】 –> F5(启动 Debug 调试功能),跳转出一个小命令框选择 【C++ (GDB/LLDB)】,然后你可以看到:
然后,我们选择:【gcc build and debug active file】,此时 VSCode 会自动在工作区中创建 .vscode
,并且在 .vscode
目录下生成配置文件:launch.json
,用来配置调试的相关信息。内容如下:
注意:使用较新版本的 C/C++
插件时,可能无法生成 launch.json
配置文件。此时,你可以插件的设置按钮选择【Install Another Version】,这里可以选择 1.8.4
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 { "version" : "0.2.0" , "configurations" : [ { "name" : "(gdb) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "${fileDirname}\\${fileBasenameNoExtension}.exe" , "args" : [], "stopAtEntry" : false , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "MIMode" : "gdb" , "miDebuggerPath" : "F:\\MinWG64\\mingw64\\bin\\gdb.exe" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true }, { "description" : "Set Disassembly Flavor to Intel" , "text" : "-gdb-set disassembly-flavor intel" , "ignoreFailures" : true } ], "preLaunchTask" : "gcc build active file" } ] }
可以检查默认生成 launch.json
内容是否和上述一样,否则新手需要保证一致(当然,miDebuggerPath
需要配置你自己的 gdb.exe
路径)。
配置好 launch.json
文件后(用来启动调试任务),此时你可以查看 .vscode
目录下是否生成 tasks.json
?
如果有 tasks.json
文件,直接跳过这里开始后续配置,否则重新 –> F5(启动 Debug 调试功能)此时可能会弹出窗口显示(很大可能):
1 Could not find the task 'gcc build active file'
提示你找不到 task gcc build active file
,这时因为 task.json
文件不存在。
2.1.1-2 –> 配置构建任务
此时菜单栏选择 【Terminal –> Configure Task –> Create task.json file from template –> others】 便会自动完成 tasks.json
的创建,默认内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 { "version" : "2.0.0" , "tasks" : [ { "label" : "echo" , "type" : "shell" , "command" : "echo Hello" } ] }
此时需要我们来重新配置 tasks.json
文件,配置内容如下:
注意 command 要修改为你本地的 gcc.exe
路径;【options -> cwd】 也需要修改为你本地的 MinWG64/bin
路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "version" : "2.0.0" , "tasks" : [ { "label" : "gcc build active file" , "type" : "cppbuild" , "command" : "F:\\MinWG64\\mingw64\\bin\\gcc.exe" , "args" : [ "-g" , "${file}" , "-o" , "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options" : { "cwd" : "F:\\MinWG64\\mingw64\\bin" }, "problemMatcher" :[ "$gcc" ], "group" : { "kind" : "build" , "isDefault" : true } } ] }
对于 tasks.json
文件,是为了方便在 VScode 里编译 C/C++ 代码,可以将类似 g++ -g main.cpp
等 gcc/g++ 命令写入 VScode 的任务系统。
========================================================================
再来总结一下:
launch.json 用来启动断点调试程序,其中有一个 ”preLaunchTask“=”gcc build active file"
,也就是添加一个 launch(启动)的任务,任务名为 gcc build active file
,这 gcc build active file
就是我们在 tasks.json 中设置的 lable(个人理解:也就是说 launch 通过 preLaunchTask 去 tasks.json 查找具体的编译任务,然后完成编译,链接,运行….)。
========================================================================
事实上,如果你仅仅编写 C 语言,到此 VS Code 已经能够满足你的要求。你可以尝试一下对上述给出的 C 源码进行断点调试(F5)。调试的两个快捷键与 Visual Studio 相同,F10
逐过程,F11
逐语句。
2.1.2 —> C++ 语言配置
我们再来创建一个 C++ 源码文件(c++Test.py)用于完成后续 C++ 语言的配置与测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <iostream> using namespace std ;int main (int argc, char const *argv[]) { cout << "Welcome to use VS Code." << endl ; return 0 ; }
此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C++ 的代码了:
1 2 3 4 [Running] cd "e:\VSCodeWorkS\CPPProjectWSC\" && g++ c++Test.cpp -o c++Test && "e:\VSCodeWorkS\CPPProjectWSC\"c++Test Welcome to use VS Code. [Done] exited with code=0 in 0.515 seconds
完美~~~
继续 ↓↓↓↓↓
2.1.2-1 –> 配置调试设置
继续配置 C++ 的断点调试,参照前面已经生成的 C 的配置:
先来打开之前配置 C 语言的 launch.json
,点击页面右下角的【Add Configuration】,选择【(gdb)launch】,可以看到为我们生成的一个新的调试方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 "configurations": [ { "name" : "(gdb) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "enter program name, for example ${workspaceFolder}/a.exe" , "args" : [], "stopAtEntry" : false , "cwd" : "${fileDirname}" , "environment" : [], "externalConsole" : false , "MIMode" : "gdb" , "miDebuggerPath" : "/path/to/gdb" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true }, { "description" : "Set Disassembly Flavor to Intel" , "text" : "-gdb-set disassembly-flavor intel" , "ignoreFailures" : true } ] },
对比着之前的 gcc 调试方式,我们需要修改一点细节,从之前生成的信息复制过来修改 launch.json,主要修改这几个选项:
–> 1] program
1 ${fileDirname}\\${fileBasenameNoExtension}.exe
–> 2] miDebuggerPath
–> 3] stopAtEntry
–> 4] 添加 preLaunchTask
1 "preLaunchTask": "g++ build active file" // 注意上个设置项结尾的逗号
然后,修改一下两个启动器名称(name 重复了),完成后的 launch.json 变为如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 { "version" : "0.2.0" , "configurations" : [ { "name" : "(G++) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "${fileDirname}/${fileBasenameNoExtension}.exe" , "args" : [], "stopAtEntry" : false , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "windows" : { "MIMode" : "gdb" , "miDebuggerPath" : "F:/MinWG64/mingw64/bin/gdb.exe" }, "linux" : { "MIMode" : "gdb" , "miDebuggerPath" : "/usr/bin/gdb" }, "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true }, { "description" : "Set Disassembly Flavor to Intel" , "text" : "-gdb-set disassembly-flavor intel" , "ignoreFailures" : true } ], "logging" : { "exceptions" : true , "moduleLoad" : true , "programOutput" : true , "engineLogging" : false , "trace" : false , "traceResponse" : false }, "preLaunchTask" : "g++ build active file" }, { "name" : "(GCC) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "${fileDirname}/${fileBasenameNoExtension}.exe" , "args" : [], "stopAtEntry" : true , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "MIMode" : "gdb" , "miDebuggerPath" : "F:/MinWG64/mingw64/bin/gdb.exe" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true }, { "description" : "Set Disassembly Flavor to Intel" , "text" : "-gdb-set disassembly-flavor intel" , "ignoreFailures" : true } ], "preLaunchTask" : "gcc build active file" } ] }
2.1.2-2 –> 配置构建任务
然后我们打开 task.json
,按照之前生成的 gcc 编译命令,添加 g++ 编译命令。只需将之前的复制过来一份更改以下项目就行:
–> 1] label
1 将 gcc build active file 改为:g++ build active file
–> 2] command
1 将之前的调试编译器由 "gcc" 改为:"g++"
完成后的 task.json 配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 { "version" : "2.0.0" , "tasks" : [ { "label" : "g++ build active file" , "type" : "shell" , "command" : "F:/MinWG64/mingw64/bin/g++.exe" , "args" : [ "-g" , "${file}" , "-o" , "${fileDirname}/${fileBasenameNoExtension}.exe" ], "options" : { "cwd" : "F:/MinWG64/mingw64/bin" }, "problemMatcher" :[ "$gcc" ], "group" : { "kind" : "build" , "isDefault" : true } }, { "label" : "gcc build active file" , "type" : "shell" , "command" : "F:/MinWG64/mingw64/bin/gcc.exe" , "args" : [ "-g" , "${file}" , "-o" , "${fileDirname}/${fileBasenameNoExtension}.exe" ], "options" : { "cwd" : "F:/MinWG64/mingw64/bin" }, "problemMatcher" :[ "$gcc" ], "group" : { "kind" : "build" , "isDefault" : true } } ] }
至此,回到我们的调试界面(Debug),已经可以看到启动条目里面具有 g++/gcc 调试选项,你可以再尝试一下对上述给出的 C++ 源码进行断点调试(F5)。
好了,你的 VS Code(Windows)已经可以同时编译调试 C/C++ ~
你应该还没忘了之前说过的有 4 个文件进行配置吧?余下的两个配置文件与 C/C++(库引用、C 标准等)以及一些项目自定义设置相关。
话不多说,开始配置:
2.1.2-3 –> 配置单文件夹工作区设置(settings.json)
VSCode 可以通过 用户(User) 和 文件夹 设置来实现高度可配置化。用户设置是全局的,但单文件夹的工作区的设置(.vscode/settings.json)是针对当前项目进行独立设置的,它会覆盖用户设置,你可以在其中进行当前项目的个性化设置。
换句话说,你可以在 settings.json
中针对当前工程项目类别(C++ or Java?)进行远超符合你代码书写习惯的设置,例如配置 Tab
空格数、自动保存、自动格式化等等。
如何自动生成 settings.json
文件??? >>>>>
打开 VSCode 设置页面(Ctrl + ,
),切换到 Workspace,在配置项中随便找一个 Edit in settings.json
打开,即可在 .vscode
下自动生成 settings.json
文件。如果你已经针对工作区进行过配置,settings.json
是不为空的,否则应该是一个空白的文件。
这里给一个样例配置(你可以根据个人需要进行设置):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 { "files.autoSave" : "onWindowChange" , "files.autoSaveDelay" : 3000 , "editor.tabSize" : 4 , "editor.formatOnSave" : false , "editor.formatOnPaste" : true , "code-runner.runInTerminal" : false , "code-runner.executorMap" : { "c" : "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" , "cpp" : "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" }, "code-runner.saveFileBeforeRun" : true , "code-runner.preserveFocus" : true , "code-runner.clearPreviousOutput" : true , "C_Cpp.clang_format_sortIncludes" : true , "C_Cpp.intelliSenseEngine" : "Default" , "C_Cpp.errorSquiggles" : "Disabled" , "C_Cpp.autocomplete" : "Default" , "files.associations" : { "iostream" : "cpp" , "exit-thread.h" : "c" , "ldsodefs.h" : "c" , "random" : "cpp" , "tls.h" : "c" , "dl-osinfo.h" : "c" , "stdio.h" : "c" } }
2.1.2-4 –> 配置 C/C++ 引用库路径(c_cpp_properties.json)
Ctrl + Shift + P
调出命令控制窗口,再输入 edit
或者 configuration
,选择 "C/C++:Edit Configurations(JSON)"
,然后这个文件就出来了,默认配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { "configurations" : [ { "name" : "Win32" , "includePath" : [ "${workspaceFolder}/**" ], "defines" : [ "_DEBUG" , "UNICODE" , "_UNICODE" ], "compilerPath" : "F:\\MinWG64\\mingw64\\bin\\gcc.exe" , "cStandard" : "gnu17" , "cppStandard" : "gnu++14" , "intelliSenseMode" : "windows-gcc-x64" } ], "version" : 4 }
注意,该配置文件中不允许有注释!!!
你需要将 C/C++ 开发可能用到的引用库路径设置进来,添加到 includePath
选项中即可。
支持自动查询,includePath
中需要添加的路径获取方法:cmd ——> gcc -v -E -x c++ -
,搜索结果如下:
给出 c_cpp_properties.json
最终的配置内容(注意 brower 选项):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 { "configurations" : [ { "name" : "Win32" , "includePath" : [ "${workspaceFolder}/**" , "F:/MinWG64/mingw64/include" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" ], "defines" : [ "_DEBUG" , "UNICODE" , "_UNICODE" ], "compilerPath" : "F:\\MinWG64\\mingw64\\bin\\gcc.exe" , "cStandard" : "gnu17" , "cppStandard" : "gnu++14" , "intelliSenseMode" : "windows-gcc-x64" , "browse" : { "limitSymbolsToIncludedHeaders" : true , "databaseFilename" : "" , "path" : [ "${workspaceFolder}/**" , "F:/MinWG64/mingw64/include" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed" , "F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" ] } } ], "version" : 4 }
其中,browse 字段(重要)说明 >>>>
如果只是将需要包含的头文件放在 includePath
字段中,那么 include
的问题解决了,但是 defines
的问题还没有解决,这将会出现一大堆的提示。
这些提示大部分都是因为缺少相应的宏定义引起的,而 browse
可以搜索相应 browse.path
字段中所有的宏定义,并把缺少的宏定义补全,让 Definition/Declaration
操作可以无障碍。
For Linux 接下来,来看 Linux 平台下 C/C++ 编译器的选择,安装以及配置(大同小异):
配置 C/C++ 编译器:GCC && G++ 对于 Centos( Centos7.2)而言,安装后可能是没有 C 语言和 C++ 编译环境的,故需要手动安装(yum)GCC/g++(安装前你可以通过 gcc/g++ --version
测试一下是否已安装过):
1 2 3 4 # GCC $ yum -y install gcc # g++ $ yum -y install gcc-c++
而对于 Ubuntu( Ubuntu16.04 Check),系统中默认已安装有 GCC/g++,你可以查看当前版本:
1 2 3 4 5 6 7 8 9 10 11 deeplearning@ThinkCentre-M910s-N000:~/DeepLearning$ gcc --version gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. deeplearning@ThinkCentre-M910s-N000:~/DeepLearning$ g++ --version g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
解决了编译器的问题后,接着看如何完成后续的 VSCode 配置: >>>>
配置工程文件夹 前面提到过,需要使用 VSCode 设置规则在工程文件夹中进行一些配置,以可以帮助我们完成一键构建(编译、链接等)、运行……
事实上,这总共会涉及到 4 个配置文件:
1 2 3 4 5 6 7 8 9 10 11 # launch.json # tasks.json # settings.json # c_cpp_properties.json >>> 注意: # VSCode 单次运行一个脚本视为一个 task,相应任务的配置文件为 tasks.json; # settings.json 为上面我们创建的工程文件夹(工作区,CppProjectWSC)的配置文件; # launch.json 是调试环境的配置文件; # c_cpp_properties.json 主要是用来配置 C/C++ 引用库路径的。
在开始 【launch.json & tasks.json & settings.json & c_cpp_properties.json】 配置之前,你应该知道:
你可以选择直接在当前工程文件夹(CppProjectWSC)下创建一个 .vscode 文件夹,作为工程文件夹的环境配置目录,随后直接创建空白的上述四个文件,然后贴入你的配置内容,这是允许的。
但我们 不建议采用这种直接创建的方式,VSCode 直接提供了自动生成的方法 ,自动生成后你只需要修改或者添加一些你需要的配置就可以了。
2.1 –> Go Start
我们将从 VSCode 中的 Debug(爬虫)功能入手,来完成整个配置过程。并且熟悉 VSCode 中 C/C++ 代码的编译、运行以及断点调试。
首先,点击“爬虫”按钮(或 Ctrl + Shift + D),打开 VSCode 中的 Debug(C/C++ 编译调试)界面观察一下:
下面正式开始配置 gcc 和 g++ 分别用于编译 C 和 C++:
2.1.1 –> C 语言配置
开始配置之前,先给出一个 C 的实例代码方便后续的配置以及环境测试。在工程文件夹 CppProjectWSC 下创建一个名为 cTest.c
的 C 源码文件,内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main (int argc, char const *argv[]) { printf ("Welcome to use VS Code.\n" ); printf ("This is a debug test.\n" ); return 0 ; }
此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C 的代码了:
完美~~~
继续 ↓↓↓↓↓
2.1.1-1 –> 配置调试设置
【Ctrl + Shift + D】 –> F5(启动 Debug 调试功能),跳转出一个小命令框选择 【C++ (GDB/LLDB)】,然后你可以看到:
然后,我们选择:【gcc build and debug active file】,此时 VSCode 会自动在工作区中创建 .vscode
,并且在 .vscode
目录下生成配置文件:launch.json
,用来配置调试的相关信息。内容如下:
注意:使用较新版本的 C/C++ 插件时,可能无法生成 launch.json 配置文件。此时,你可以插件的设置按钮选择【Install Another Version】,这里可以选择 1.8.4。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "version" : "0.2.0" , "configurations" : [ { "name" : "gcc build and debug active file" , "type" : "cppdbg" , "request" : "launch" , "program" : "${fileDirname}/${fileBasenameNoExtension}.out" , "args" : [], "stopAtEntry" : true , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "MIMode" : "gdb" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true } ], "preLaunchTask" : "gcc build active file" , "miDebuggerPath" : "/usr/bin/gdb" } ] }
可以检查默认生成 launch.json
内容是否和上述一样,否则新手需要保证一致(当然,miDebuggerPath 需要配置你自己的 gdb
路径)。
配置好 launch.json
文件后(用来启动调试任务),此时你可以查看 .vscode
目录下是否生成 tasks.json
?
如果有 tasks.json
,直接跳过这里开始后续配置,否则重新 –> F5(启动 Debug 调试功能)此时可能会弹出窗口显示(很大可能):
1 Could not find the task 'gcc build active file'
提示你找不到 task gcc build active file
,这时因为 task.json
文件不存在。
2.1.1-2 –> 配置构建任务
此时菜单栏选择 【Terminal –> Configure Task –> Create task.json file from template –> others】 便会自动完成 tasks.json
的创建,默认内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 { "version" : "2.0.0" , "tasks" : [ { "label" : "echo" , "type" : "shell" , "command" : "echo Hello" } ] }
此时需要我们来重新配置 tasks.json
文件,配置内容如下:
注意 command
要修改为你本地的 gcc
路径;【options -> cwd】 也需要修改为你本地的 gcc/bin
路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 { "tasks" : [ { "type" : "shell" , "label" : "gcc build active file" , "command" : "/usr/bin/gcc" , "args" : [ "-g" , "${file}" , "-o" , "${fileDirname}/${fileBasenameNoExtension}.out" ], "options" : { "cwd" : "/usr/bin" }, "group" : { "kind" : "build" , "isDefault" : true } } ], "version" : "2.0.0" }
对于 tasks.json
文件,是为了方便在 VScode 里编译 C/C++ 代码,可以将类似 g++ -g main.cpp
等 gcc/g++
命令写入 VScode 的任务系统。
========================================================================
再来总结一下:
launch.json
用来启动断点调试程序,其中有一个 ”preLaunchTask“=”gcc build active file"
,也就是添加一个 launch(启动)的任务,任务名为 gcc build active file
,这 gcc build active file
就是我们在 tasks.json
中设置的 lable(个人理解:也就是说 launch 通过 preLaunchTask
去 tasks.json
查找具体的编译任务,然后完成编译,链接,运行….)。
========================================================================
事实上,如果你仅仅编写 C 语言,到此 VS Code 已经能够满足你的要求。你可以尝试一下对上述给出的 C 源码进行断点调试(F5
)。调试的两个快捷键与 Visual Studio 相同,F10
逐过程,F11
逐语句。
2.1.2 —> C++ 语言配置
我们再来创建一个 C++ 源码文件(c++Test.py)用于完成后续 C++ 语言的配置与测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <iostream> using namespace std ;int main (int argc, char const *argv[]) { cout << "Welcome to use VS Code." << endl ; return 0 ; }
此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C++ 的代码了:
完美~~~
继续 ↓↓↓↓↓
2.1.2-1 –> 配置调试设置
继续配置 C++ 的断点调试,参照前面已经生成的 C 的配置:
先来打开之前配置 C 语言的 launch.json
,点击页面右下角的【Add Configuration】,选择【(gdb)launch】,可以看到为我们生成的一个新的调试方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 "configurations": [ { "name" : "(gdb) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "enter program name, for example ${workspaceFolder}/a.out" , "args" : [], "stopAtEntry" : false , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "MIMode" : "gdb" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true } ] }
对比着之前的 gcc 调试方式,我们需要修改一点细节,从之前生成的信息复制过来修改 launch.json,主要修改这几个选项:
–> 1] program
1 ${fileDirname}/${fileBasenameNoExtension}.o
–> 2] miDebuggerPath
–> 3] stopAtEntry
–> 4] 添加 preLaunchTask
1 "preLaunchTask": "g++ build active file" // 注意上个设置项结尾的逗号
然后,修改一下两个启动器名称(name 重复了),完成后的 launch.json 变为如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 { "version" : "0.2.0" , "configurations" : [ { "name" : "(G++) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "${fileDirname}/${fileBasenameNoExtension}.out" , "args" : [], "stopAtEntry" : true , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "windows" : { "MIMode" : "gdb" , "miDebuggerPath" : "D:\\..." , }, "linux" : { "MIMode" : "gdb" , "miDebuggerPath" : "/usr/bin/gdb" , }, "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true } ], "logging" : { "exceptions" : true , "moduleLoad" : false , "programOutput" : true , "engineLogging" : false , "trace" : false , "traceResponse" : false }, "preLaunchTask" : "g++ build active file" }, { "name" : "(GCC) Launch" , "type" : "cppdbg" , "request" : "launch" , "program" : "${fileDirname}/${fileBasenameNoExtension}.out" , "args" : [], "stopAtEntry" : true , "cwd" : "${workspaceFolder}" , "environment" : [], "externalConsole" : false , "MIMode" : "gdb" , "setupCommands" : [ { "description" : "Enable pretty-printing for gdb" , "text" : "-enable-pretty-printing" , "ignoreFailures" : true } ], "preLaunchTask" : "gcc build active file" , "miDebuggerPath" : "/usr/bin/gdb" } ] }
2.1.1-2 –> 配置构建任务
然后我们打开 task.json
,按照之前生成的 gcc 编译命令,添加 g++ 编译命令。只需将之前的复制过来一份更改以下项目就行:
–> 1] label
1 将 gcc build active file 改为:g++ build active file
–> 2] command
1 将之前的调试编译器由 "gcc" 改为:"g++"
完成后的 task.json
配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 { "tasks" : [ { "type" : "shell" , "label" : "g++ build active file" , "command" : "/usr/bin/g++" , "args" : [ "-g" , "${file}" , "-o" , "${fileDirname}/${fileBasenameNoExtension}.out" ], "options" : { "cwd" : "/usr/bin" }, "group" : { "kind" : "build" , "isDefault" : true } }, { "type" : "shell" , "label" : "gcc build active file" , "command" : "/usr/bin/gcc" , "args" : [ "-g" , "${file}" , "-o" , "${fileDirname}/${fileBasenameNoExtension}.out" ], "options" : { "cwd" : "/usr/bin" }, "group" : { "kind" : "build" , "isDefault" : true } } ], "version" : "2.0.0" }
至此,回到我们的调试界面(Debug),已经可以看到启动条目里面具有 g++/gcc 调试选项,你可以再尝试一下对上述给出的 C++ 源码进行断点调试(F5)。
好了,你的 VS Code(Linux)已经可以同时编译调试 C/C++ ~
你应该还没忘了之前说过的有 4 个文件进行配置吧?余下的两个配置文件与 C/C++(库引用、C 标准等)以及一些工作区设置相关。
话不多说,开始配置:
2.1.2-3 –> 配置单文件夹工作区设置(settings.json)
VSCode 可以通过 用户(User) 和 文件夹 设置来实现高度可配置化。用户设置是全局的,但单文件夹的工作区的设置(.vscode/settings.json)是针对当前项目进行独立设置的,它会覆盖用户设置,你可以在其中进行当前项目的个性化设置。
换句话说,你可以在 settings.json
中针对当前工程项目类别(C++ or Java?)进行远超符合你代码书写习惯的设置,例如配置 Tab
空格数、自动保存、自动格式化等等。
如何自动生成 settings.json
文件??? >>>>>
打开 VSCode 设置页面(Ctrl + ,
),切换到 Workspace,在配置项中随便找一个 Edit in settings.json
打开,即可在 .vscode
下自动生成 settings.json
文件。如果你已经针对工作区进行过配置,settings.json
是不为空的,否则应该是一个空白的文件。
这里给一个样例配置(你可以根据个人需要进行设置):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 { "files.autoSave" : "onWindowChange" , "files.autoSaveDelay" : 3000 , "editor.tabSize" : 4 , "editor.formatOnSave" : false , "editor.formatOnPaste" : true , "code-runner.runInTerminal" : false , "code-runner.executorMap" : { "c" : "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" , "cpp" : "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" }, "code-runner.saveFileBeforeRun" : true , "code-runner.preserveFocus" : true , "code-runner.clearPreviousOutput" : true , "C_Cpp.clang_format_sortIncludes" : true , "C_Cpp.intelliSenseEngine" : "Default" , "C_Cpp.errorSquiggles" : "Disabled" , "C_Cpp.autocomplete" : "Default" , "files.associations" : { "iostream" : "cpp" , "exit-thread.h" : "c" , "ldsodefs.h" : "c" , "random" : "cpp" , "tls.h" : "c" , "dl-osinfo.h" : "c" , "stdio.h" : "c" } }
2.1.2-4 –> 配置 C/C++ 引用库路径(c_cpp_properties.json)
Ctrl + Shift + P
调出命令控制窗口,再输入 edit
或者 configuration
,选择 "C/C++:Edit Configurations(JSON)"
,然后这个文件就出来了,默认配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 { "configurations" : [ { "name" : "Linux" , "includePath" : [ "${workspaceFolder}/**" ], "defines" : [], "compilerPath" : "/usr/bin/gcc" , "cStandard" : "c11" , "cppStandard" : "c++17" , "intelliSenseMode" : "clang-x64" } ], "version" : 4 }
注意,该配置文件中不允许有注释!!!
你需要将 C/C++ 开发可能用到的引用库路径设置进来,添加到 includePath
选项中即可。
支持自动查询,includePath
中需要添加的路径获取方法:cmd ——> gcc -v -E -x c++ -
,搜索结果如下:
给出 c_cpp_properties.json
最终的配置内容(注意 Browser 选项):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 { "configurations" : [ { "name" : "Linux" , "includePath" : [ "${workspaceFolder}/**" , "/usr/include" ], "defines" : [ "_DEBUG" , "UNICODE" , "_UNICODE" ], "compilerPath" : "/usr/bin/gcc" , "cStandard" : "c11" , "cppStandard" : "c++17" , "intelliSenseMode" : "clang-x64" , "browse" : { "limitSymbolsToIncludedHeaders" : true , "databaseFilename" : "" , "path" : [ "${workspaceFolder}/**" , "/usr/include" ] } } ], "version" : 4 }
其中,browse 字段(重要)说明 >>>>
如果只是将需要包含的头文件放在 includePath
字段中,那么 include
的问题解决了,但是 defines
的问题还没有解决,这将会出现一大堆的提示。
这些提示大部分都是因为缺少相应的宏定义引起的,而 browse
可以搜索相应 browse.path
字段中所有的宏定义,并把缺少的宏定义补全,让 Definition/Declaration
操作可以无障碍。
Problems File not found (/build/…/glibc-2.2X) Ubuntu16.04 中遇到一个问题(Error: File not found (/build/glibc-LK5gWL/glibc-2.23
),具体如下::
1 2 3 4 5 6 7 Unable to open 'memcpy-avx-unaligned.S': Unable to read file (Error: File not found (/build/glibc-LK5gWL/glibc-2.23/sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S)). Unable to open 'libc-start.c': Unable to read file (Error: File not found (/build/glibc-LK5gWL/glibc-2.23/csu/libc-start.c)). Unable to open 'ioputs.c': Unable to read file (Error: File not found (/build/glibc-LK5gWL/glibc-2.23/libio/ioputs.c)). ...
看起来是系统中缺少 glibc-2.23 库,解决方法如下:
1 2 3 4 5 6 7 8 9 $ cd /$ sudo mkdir build $ cd build$ sudo mkdir glibc-LK5gWL # 下载相应版本的 glibc: $ sudo wget -c http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz $ sudo tar –zxvf glibc-2.23.tar.gz
上述 /build/glibc-LK5gWL/glibc-2.2X 库安装成功后,需要将其引用路径添加到:c_cpp_properties.json 中:
1 2 3 4 5 6 7 "includePath": [ "${workspaceFolder}/**" "/usr/include", "/build/glibc-LK5gWL/glibc-2.23/include", "/build/glibc-LK5gWL/glibc-2.23/**" ],
不修改的话,跳转到的源文件可能有很多报错(红色波浪线),但不影响使用。