我原来使用的是Microsoft Visual Studio进行c++程序开发的,最近想试试用vscode来开发,vs毕竟太庞大了,vscode更轻便一些,使用过一段时间后,发现vscode还是不错的。
首选说明,vscode只是一个代码编辑工具,代码的编译和调试,还需要安装其他的编译调试工具,比如微软的MSVC,或者使用gcc+gdb,MinGW等等。这里贴一下官方的文档:
https://code.visualstudio.com/docs/languages/cpp --这个是vscode 做c++开发的总概括
https://code.visualstudio.com/docs/cpp/config-msvc --这个是vscode使用msvc的配置介绍,当然也可以配置MinGW,官方文档都有详细的介绍,文档写的真心不错
网上也有一些教程,最初我也是参照别人写的博客去配置的,但是还是有一些细节问题无法解决。于是去看了官方的文档,才解决了自己的疑惑。
因为我之前一直用的Microsoft Visual Studio开发,所以有现成的编译和调试环境,只需要配置一下就可以了,下面就是我参考的博客
Windows 10下vscode使用visual studio 2017的MSVC配置C/C++编译环境
这篇文章也是写的很不错的,我这里只做一些补充。
(1)vscode装好后要做c++开发,首先就要安装C/C++ extension for VS Code.这个插件的,这个是前提
(2)vscode做c++开发必须指定一个文件夹作为工程目录,然后在这个工程目录下,会有个.vscode的隐藏文件夹,这个文件夹是存放工程配置和vs相关的配置的,最重要的是三个文件c_cpp_properties.json、launch.json和tasks.json
(3)关于这三个文件,做一下说明c_cpp_properties.json主要用于IntelliSense智能感知的,也是是代码输入提示,定义跳转,语法检查这些,tasks.json是用于编译用的,编译命令,参数,编译文件,头文件目录,依赖库目录,编译选项等等,launch.json主要是调试用的,指明调试程序,输入参数等。
(4)关于vscode需要添加自己的头文件目录和依赖库目录的问题
以上的文章中直接通过配置环境变量来实现,这个也可以,但是一般是系统的头文件和依赖库目录,如果自己引入了第三方的库,不可能每次去添加环境变量。我就是在网上查找vscode添加头文件路径问题遇到坑的,很多都说是在c_cpp_properties.json中的includePath添加就可以了,我起初以为,vscode在编译的时候会将c_cpp_properties.json中配置的包含目录添加进去,但是试过之后,虽然在代码编写的时候,提示正常,静态检查正常,但是编译的时候就会提示包含文件找不到。后来仔细阅读了官方的文档,才知道c_cpp_properties.json配置的包含目录和编译时候用到的包含目录没有半毛钱关系,在c_cpp_properties.json文件中添加的包含目录只会用于智能提示,编译的时候一样需要自己在tasks.json文件手动-I或者/I添加包含目录或者依赖库目录。
下面是使用msvc编译时我自己写的配置文件:
{
"version": "2.0.0",
"tasks": [
{
"label": "msvc build",
"type": "shell",
"command": "cl.exe",
"args": [
"/EHsc",
"/Zi",
"/I'F:/vs code/project/myinclude'",
"/Fe:",
"test.exe",
"*.cpp",
"F:/vs code/project/myinclude/*.cpp"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always"
},
"problemMatcher": "$msCompile"
}
]
}
其中的 "/I'F:/vs code/project/myinclude'"就是我自己加的头文件目录,还要注意这个加的位置,不要让shell解释器认为这个是其他选项的参数。
即完整的加头文件目录是要修改两个配置文件c_cpp_properties.json和tasks.json
(5)如果编译多个cpp文件,并且在cpp文件分布在多个文件夹中只需要在tasks.json的args中,数组末尾添加上多个项,使用通配符*.cpp可以编译完所有的cpp文件,参考以上的task.json的配置
"*.cpp",
"F:/vs code/project/myinclude/*.cpp"
这个就是配置了编译当前工作目录和F:/vs code/project/myinclude/目录下的所有cpp文件
(6)windows c++开发必须要配置的INCLUDE目录和lib目录
包含目录1: "C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.16.27023/include"
这个是Microsoft Visual Studio集成开发环境的安装目录,看你安装的对应版本的和安装位置,会有不同
包含目录2:"C:/Program Files (x86)/Windows Kits/10/Include/10.0.17763.0/shared",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.17763.0/ucrt",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.17763.0/um",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.17763.0/winrt"
这4个是windows API的包含目录,不同的机器,目录有一些小的差异,但是都是Windows Kits这个文件夹,可以在自己机器上搜索一下
库目录1:C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.16.27023/lib/x64;
这个也是Microsoft Visual Studio集成开发环境的安装目录提供的库目录,根据自己的安装位置来填写
库目录2:
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/ucrt/x64;
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/um/x64
这两个库目录也是windows API需要的库目录
(7)include和lib这个两个环境变量也可以不配置,可以直接把include路径和包含的库路径直接配置到c_cpp_properties.json和tasks.json文件中,下面是使用cl.exe编译器,直接添加所有包含头文件目录和依赖库目录的配置:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: cl.exe 生成活动文件",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/IC:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
"/IC:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/shared",
"/IC:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/ucrt",
"/IC:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/um",
"/IC:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/winrt",
"/nologo",
"/Fe:",
"test.exe",
"test.cpp",
"/link",
"/LIBPATH:C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/lib",
"/LIBPATH:C:/Program Files (x86)/Windows Kits/10/Lib/10.0.14393.0/ucrt/x86",
"/LIBPATH:C:/Program Files (x86)/Windows Kits/10/Lib/10.0.14393.0/um/x86"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: cl.exe"
}
]
}
要注意args各个参数的配置顺序,不能乱配,需要参照cl.exe编译器的使用文档来,其中/link编译选项需要放在最后,添加的依赖库目录需要在/LIBPATH:后面添加,如果还是提示识别不了类似/LIBPATH选项,自己参考cl.exe的官方使用文档去检查。官方的文档如下:
MSVC 编译器 Command-Line 语法 | Microsoft Docs
最后还有一些有用的文章:
msvc编译器cl.exe编译选项的使用:https://www.it610.com/article/4728555.htm