首言
. 通过使用CMake工具,我们可以方便地配置VS Code的C++运行和调试环境。CMake提供了一种跨平台的方式来生成构建文件,使得我们可以将项目与VS Code无缝集成,并通过简单的设置,轻松地实现编译、运行和调试C++代码的功能。本文将介绍如何使用CMake配置VS Code的C++环境,并详细说明设置运行和调试选项的步骤。cmake和编译器的安装不做介绍。
本文是对学习苏丙榅大佬的投稿总结,并运用于多线程socket编程的实践:基于CMake的VSCode下的 C/C++环境搭建_Window篇_哔哩哔哩_bilibili
项目结构
以下是基本文件结构:
其目标是生成一个基于线程池实现的socket服务器。main函数位于TcpServerThreadPool.cpp中,该文件调用其他文件。
cmake实现程序编译运行
**1. **在你的C++项目根目录中创建一个CMakeLists.txt文件,并添加项目的配置信息。**注意:该文件的名称不能写**错!本项目的CMakeLists.txt文件内容如下:
cmake_minimum_required(VERSION 3.22) #指定camke最低版本
project(Server_ByThreadPool) #指定项目名称
set(CMAKE_C_COMPILER gcc) #设置编译器
set(CMAKE_CXX_COMPILER g++)
set(CMAKE_CXX_STANDARD 11) #设置c++版本
aux_source_directory(ThreadPool_cpp SRC_ThreadPool) #获取项目中涉及的源文件
aux_source_directory(Server SRC_Server)
include_directories(ThreadPool_cpp)#导入库
include_directories(Server)
find_package(Threads REQUIRED) #寻找系统安装的pthread库
add_executable(TCPServer ${SRC_ThreadPool} ${SRC_Server}) #生成可执行文件
target_link_libraries(TCPServer Threads::Threads ws2_32) #链接到可执行文件中
**2.**按下**Ctrl+shift+P**,输入并选择**cmake:Configure**,在弹出的框中选择你的编译器。
当得到如下输出并生成了build文件夹之后,说明cmake配置成功了。
**3.**进入build文件夹,在当前目录的上一级目录中执行CMake构建。CMake可以根据项目的配置信息生成适用于不同构建系统(如Makefile、Visual Studio解决方案等)的构建系统文件,这些文件定义了项目的编译、链接、安装等过程。
在vscode中新建一个terminal,分别输入以下命令:cd build 和 cmake .. 注:如果输入cmake报错,可以尝试输入:**cmake .. -G "MinGW Makefiles"**
4.继续输入mingw32-make。在当前目录下查找生成的Makefile文件,并利用MinGW编译器进行项目的编译。文件存储在build文件夹中,找到这个文件就可以运行了,后续的运行不再展示。
利用cmake配置调试环境
**1.**界面打开main函数在的源文件(**这个很重要,否则可能无法成功生成task.json**)
** 2.**选择Terminal->configure Tasks,并选择一个编译器来生成task.json(**这里到后面会替换掉task.json的内容**,所以选择哪一个都差不多,不过还是建议选择自己稳定装好的编译器)
**3**.将task.json 中的内容替换为以下内容,这是一个利用camke进行编译的命令模板:(详细的每一步解释可以参考上面链接中的教程P5里面)
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}/build/"
},
"tasks": [
{
"label": "cmake", //camke ..命令
"type": "shell",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make", //mingw32-make.exe命令
"group":{
"kind":"build",
"isDefault":true
},
"command": "mingw32-make.exe",
"args":[
]
},
{
"label":"C/C++: g++.exe 生成活动文件", //运行前面两个任务
"dependsOn":[
"cmake",
"make"
]
}
]
}
4.点击左边的三角形(从上往下数第四个),点击create a lunch.json file。![](https://img-blog.csdnimg.cn/direct/79838b664eec4977a636819e99524051.png)
选择一个编译器(这里选择GDB/LLDB)得到Launch.json文件
5.将launch文件中的内容替换为以下内容,其中需要修改一部分内容,需修改的部分打了注释。这段配置的作用是通过GDB调试器调试指定路径中的TCPServer.exe可执行文件。在启动调试前,会先执行名为"C/C++: g++.exe 生成活动文件"的任务。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\build\\TCPServer.exe", //可执行程序的完整路径,TCPServer替换为CmakeList文件中指定的程序名称
"args": [],
"stopAtEntry": false,
"cwd": "F:\\study_app\\MinGW\\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\\mingw64\\bin", //编译器路径
"environment": [],
"console": "externalTerminal",
"MIMode": "gdb",
"miDebuggerPath": "F:\\study_app\\MinGW\\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe", //GDB调试器的路径。
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件" //指定在运行调试之前需要调用的生成活动文件的task任务,这个要与task.json文件中第三个任务的名称相同
}
]
}
6.配置成功后打完断点就可以按F5快速调试了,图为调试状态
版权归原作者 是板栗啊 所有, 如有侵权,请联系我们删除。