目录

一、vscode配置

二、项目结构

三、编译

3.1 工作原理

3.2 在vscode中如何使用cmake进行编译

三、调试


 

Vscode建立C++项目结构及各个文件夹的作用(不使用CMakeList.txt版)_玛丽莲茼蒿的博客-CSDN博客首先要明白,vscode只是一个记事本,本身是不能够进行任何程序语言开发的。只不过这个记事本可以安装插件,可以和命令行程序结合起来使用,使得它可以进行开发。一、Vscode下C++项目的目录结构首先,类似于我们在IDEA中新建一个普通java项目,项目的目录结构是这样的:新建一个maven模板的java项目,项目的目录结构是这样的:构建一个web模板的java项目,项目的目录结构是这样的:用springboot模板构建一个java项目,项目的目录结构是这样的:对于C++.https://blog.csdn.net/qq_44886213/article/details/124194352?spm=1001.2014.3001.5501        由这篇博客可知,如果不使用CMakeLists.txt构建C++项目的话,就要编写.vscode文件夹中的三个json文件。除了麻烦外,还必须依托vscode这个平台,没法单独在shell/cmd编译。下面就要介绍一下,如何在vscode中使用CMakeLists.txt构建C++项目。

一、vscode配置

插件:

  • CMake
  • CMake tools
  • CMake Tools Helper

插件的功能是CMake语法高亮、自动补全,结合VSCode IDE生成CMake项目、构建CMake项目等。CMake工具本身还是要下载到本地,并且配置环境变量

二、项目结构

完整的项目结构一般是这样:

- build

- include

- src

- bin

- lib

CMakeLists.txt

给出两个真实项目的项目结构: 

包括6部分:build文件夹include文件夹src文件夹、lib文件夹、bin文件夹CMakeLists.txt

 其中,各个文件夹的作用已经介绍过了。下面重点介绍在vscode中使用CMakeLists.txt。

三、编译

3.1 工作原理

        首先,我们需要知道make工具,它是一个自动化编译工具,用来批处理编译源文件,使用make工具进行编译需要编写一个规则文件Makefile,但是对于一个大工程,编写Makefile也是一件很复杂的事情。所以我们又向上抽象了一层,设计出了更为简单的CMakeLists.txt,开发人员只需要去编写简单的CMakeLists.txt,然后用cmake工具,它能够自动生成Makefile文件。然后再用make。。。。。

3.2 在vscode中如何使用cmake进行编译

有两种方式,一种是直接在vscode的内嵌命令行里输命令,见下面这篇博客。

【C++】CMakeList.txt在命令行的使用_玛丽莲茼蒿的博客-CSDN博客前提:在官网下载好了cmake工具,并且配置好了环境变量。一、编写CMakeLists.txt在项目的顶层目录中,建立一个CMakeLists.txt文件。以某个真实项目为例,内容如下:cmake_minimum_required (VERSION 3.10.0)SET(CMAKE_BUILD_TYPE "Debug")SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")SET(CMAKE_CXX_FLAGS_R.https://blog.csdn.net/qq_44886213/article/details/124484239?spm=1001.2014.3001.5501还有一种是结合vscode的插件,详见这篇博客。VSCode与CMake搭配使用之基本配置_501007162021的博客-CSDN博客_cmake vscode1.首先安装VSCode插件CMake和CMake ToolsCMake插件主要功能是CMake语法高亮、自动补全CMake Tools的功能主要是结合VSCode IDE使用CMake这个工具,比如生成CMake项目、构建CMake项目等2.新建CMake项目Ctrl+Shift+p打开VSCode的指令面板,然后输入cmake:q,VSCode会根据输入自动提示,然后选择CMake: Quick Start然后选择适合你的编译器(VSCode会将你安装的编译器都罗列出来供你选择。如果你https://blog.csdn.net/jiasike/article/details/107474368?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165115041316782390596774%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165115041316782390596774&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-107474368.142^v9^pc_search_result_cache,157^v4^new_style&utm_term=vscode++cmake&spm=1018.2226.3001.4187 Ctrl+Shift+p打开VSCode的指令面板,然后输入cmake:q,VSCode会根据输入自动提示,然后选择CMake: Quick Start

 然后选择适合你的编译器(VSCode会将你安装的编译器都罗列出来供你选择。如果你是交叉编译,那么就可以在这里配置你的交叉编译器),为方便演示这里我们选择GCC7.4.0

 然后根据提示输入项目名称:

 然后选择该项目是创建库还是可执行文件(选择不同,自动生成的CMakeLists.txt的内容也就不同),这里我们选择可执行文件Executable

 然后VSCode就会为你生成一个CMake项目,如下所示:

默认只给出了main.cpp。其他的文件夹比如include文件夹、src文件夹、bin文件夹等自己建立就行。

接下来是如何结合插件编译。点击底部的Build就行了,是不是比命令行简单一些?而且还有高亮显示。

 

PS: 不过还是推荐我们每次编写程序的时候编写一下c_cpp_properties.json,因为该文件中includePath参数可以很好指定头文件目录,这样就算没有CMakeLists.txt文件,我们在vscode编写程序的时候它也自动包含了头文件,这样就可以具有代码提示功能 。而且,有了CMakeLists.txt以后,即使写了c_cpp_properties.json文件,也并不影响项目脱离vscode单独在shell/cmd里编译运行。

三、调试

为什么把debug单独拿出来说呢?因为有的时候我的编码习惯是这样的:只是把vscode当作具有代码提示功能的编辑器,然后编译和运行直接用本地的cmake在shell进行,得到可执行程序以后用gdb进行代码的调试

按照我之前的这种习惯,除了简单地下载C/C++插件以外不需要对vscode进行任何配置,因为除了打代码外,后续的过程直接不在vscode里。这是一种思路。

但是呢,如果想要在vscode里实现从编码到调试的一体化过程,还需要和上一篇博客一样对vscode进行额外的配置,即配置launch.json文件。这篇博客讲的比较好一步一步学CMake 之 VSCode+CMakeLists 调试 C++ 工程_芝士锅的博客-CSDN博客_cmake vscode 调试目录1. 插件推荐2. 文件准备3. 开始调试一步一步学 CMake 系列文章1. 插件推荐CMakeCMake toolsCMake Tools Helper2. 文件准备新建文件夹:TEST新建文件:CMakeLists.txt内容如下:cmake_minimum_required(VERSION 2.6)project(vscode_...https://blog.csdn.net/wanzew/article/details/83097457

 步骤

假设我们有如下的CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

。。。

add_executable(result ${SRC_LIST}) # 可执行文件命名为result

点击图中最左侧第四个小蜘蛛形状的图标(调试),点击左上方的小齿轮,添加配置(C++GDB/LLDB)

 这个时候资源管理器下就会生成.vscode文件夹,下面有个launch.json文件,内容如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "enter program name, for example ${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

把下面一句:

"program": "enter program name, for example ${workspaceFolder}/a.out",

改成:(根据CMakeLists.txt文件内容,将会在build文件夹下生成result可执行文件)

"program": "${workspaceFolder}/build/result"

然后就可以加断点调试了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐