VSCode中配置CMake,通过CMake断点调试程序
第一步:
1.引入make
在VSCode中编写C++程序,只能编译一个源文件,如果需要同时编译多个源文件,那么就需要批处理工具——CMake工具或者Clion(专业的);
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式——通过调用makefile文件中用户指定的命令来进行编译和链接的。
2.什么是makefiles?
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
make需要按照makefile中的命令执行!
makefile命令中就包含了调用许多编译器(如我们这里多用到的gcc编译器)去编译某个源文件的命令。
人总是“懒惰的”,makefile在一些简单的工程完全可以人工手写,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。因此我们引入了cmake
3.什么是cmake呢?
CMake这个名字是cross platform make的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。
CMake可以更加简单的生成makefile文件给上面的make用。当然CMake还可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
4.CMake生成makefile的原理
cmake生成makefile的原理是根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。当然CMakeLists.txt就需要你自己去手写了!
5.编写CMakeLists.txt文件是重点
第二步:
1、下载安装 VSCode
2、下载安装 MinGW
3、下载安装 CMake
4、在VSCode里面安装插件
5、打开VSCode,ctrl+shift+P
6、然后导入一个文件,开始撸码,在这编写两个文件,一个是测试程序,一个是CMakeLists.txt
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project(directory_test)
#Bring the headers, such as Student.h into the project
include_directories(include)
#Can manually add the sources using the set command as follows:
#set(SOURCES src/mainapp.cpp src/Student.cpp)
#However, the file(GLOB...) allows for wildcard additions:
file(GLOB SOURCES "src/*.cpp")
add_executable(last ${SOURCES})
set (CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -g”)
这个文件也可以通过ctrl+shift+P 然后输入
注意: 1、CMakeLists.txt 文件中的这行代码 如果你要debug的时候就写上 否则不要写,编译的时候会报错
#set (CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -g”)
2、需要在MinGW安装路径下进行操作,本来只有mingw32-make.exe文件,你需要复制一份改名为make.exe,只有这样才能在终端使用 make 命令操作,如下图:
第三步:Debug 断点调试
1、在源码左边进行加断点
2、按照一下操作,生成launch.json文件
{
// 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": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/last.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "E:/MinGW/mingw64/bin/gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
//"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}