利用cmake配置VScode的C++运行与调试环境
首言
. 通过使用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。
选择一个编译器(这里选择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快速调试了,图为调试状态