您现在的位置是:首页 >学无止境 >VScode 中运行C++,并用g++命令、CMake、配置launch.josn和tasks.json来运行和调试可执行文件网站首页学无止境
VScode 中运行C++,并用g++命令、CMake、配置launch.josn和tasks.json来运行和调试可执行文件
前期安装准备
安装VScode、cmake、mingw32 (具体版本如下)
VSCodeUserSetup-x64-1.78.0.exe
cmake-3.26.3-windows-x86_64.msi
x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
将这几个的bin目录加入系统环境变量(右击此电脑,属性,高级,环境变量,Path,编辑,新建)
VScode扩展插件安装:
- C/C++ v1.8.4(此插件需要注意版本)
- Chinese(中文简化)(选择性安装,要熟悉一点英文)
- C/C++ Extension Pack v1.3.0
- C/C++ Project Generator v1.2.11
- C/C++ Themes v2.0.0
- CMake v0.0.17
- CMake Tools v.1.14.31
- Code Runnner v0.12.0
- Makefile Tools v0.7.0
新建一个项目和main.cpp
#include<iostream>
using namespace std;
void swap(int& a,int& b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int val1=18;
int val2=20;
cout<<"Before swap"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
swap(val1,val2);
cout<<"After swap"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
}
基于g++命令,编译单文件,生成带调试信息的可执行文件,并调试
g++ -g main.cpp -o my_single_swap
-g:代表生成可调试的.exe文件
-o:生成.exe文件名为my_single_swap.exe
更改项目分支,将swap函数单独拎出来
├── include
│ └── swap.h
├── swap.cpp
└── main.cpp
swap.cpp文件内容
#include "stdio.h"
void swap(int& a,int& b)
{
int temp;
temp=a;
a=b;
b=temp;
}
swap.h头文件里内容,声明交换函数
void swap(int& a,int& b);
main.cpp文件内容
#include<iostream>
#include "stdio.h"
using namespace std;
int main()
{
int val1=18;
int val2=20;
cout<<"Before swap"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
swap(val1,val2);
cout<<"After swap"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
}
基于g++命令,编译多文件,生成带调试信息的可执行文件,并调试
g++ -g .main.cpp swap.cpp -o my_single_swap
可能会报错,没有swap.h库,通过-I包含include文件夹
g++ -g .main.cpp swap.cpp -I include -o my_single_swap
若项目构建方式不同,需要相应更改命令,比如swap.cpp,main.cpp放在src文件夹下
g++ -g .srcmain.cpp .srcswap.cpp -I include -o my_single_swap
输入命令行时学会用 tab自动补全功能,代码编写:ctrl+"/"注释,shift+alt+向上或向下箭头复制行代码,ctrl+shift+p:打开面板platte
基于Cmake(相当于将g++命令集成与CMakeLists.txt文本中)
构建CMakeLists.txt(注意大小写)
├──CMakeLists.txt
├── include
│ └── swap.h
├── swap.cpp
└── main.cpp
CMakeLists.txt里的内容:
project(Myswap) //项目名
include_directories(include)//包含库文件,针对找不到swap.h问题
add_executable(my_swap main.cpp swap.cpp)//基于main.cpp, swap.cpp生成my_swap.exe
通过Cmake生成可执行文件,进行多文件编译并调试
-
输入ctrl+shift+p,选择cmake:Configure,选择g++(选定编译器)
-
打开终端,new terminal,输入以下命令
mkdir build(新建文件夹)
cd ./build(切换至build文件夹)
cmake .. -G "Unix Makefiles"(Ubuntu环境下)
cmake .. -G "MinGw Makefiles"(Win环境下)
cmake ..(生成Makefile文件)
mingw32-make.exe(运行生成.exe文件)
输入命令后,分支结构为:
├──build
│ └── Makefile
│ └── my_swap.exe
│ └── .cmake
│ └── CMakeFiles
│ └── cmake_install.cmake
│ └── CMakeCache.txt
│ └── compile_commands.json
├── include
│ └── swap.h
├──CMakeLists.txt
├── swap.cpp
└── main.cpp
配置json
launch.json-- for debug
tasks.json – for build before debug
用g++或cmake生成可执行文件后,点击run,start debugging(F5),选择C++(GDB/LLDB),选择调试的环境g++.
此时会生成 .vscode文件夹
├── .vscode
│ └── launch.json
│ └── tasks.json
launch.json需要注意两个地方
-1- “program”:对应生成的.exe文件
-2- “preLaunchTask”: “C/C++: g++.exe build active file” 需要与task.json里的label位置对应
-3- “args”: [],对应main.cpp里的
int main(int argc,char* argv)
tasks.json需要注意两个地方
“args”: [
“-fdiagnostics-color=always”,
“-g”,
“
f
i
l
e
"
,
"
−
o
"
,
"
{file}", "-o", "
file","−o","{fileDirname}${fileBasenameNoExtension}.exe”
],
args对应输入的g++命令
launch.json里的preLaunchTask代表先进行build,对应tasks.json的label,它依赖于cmake、make两个子task.
label:cmake对应的command是
cmake ..
,
label:make对应的command是mingw32-make.exe
,
即对应cmake生成可调式文件的两条命令。