【C++】Vscode 中不使用CMakeLists构建C++项目:项目结构、各个文件夹作用、从编码到debug一体化

首先要明白,vscode只是一个记事本,本身是不能够进行任何程序语言开发的。只不过这个记事本可以安装C++插件,使得它可以进行开发。

windows 10上使用vscode编译运行和调试C/C++ - 知乎

一、Vscode下C++的项目结构

首先,类似于我们在IDEA中新建一个普通java项目,项目的目录结构是这样的:

新建一个maven模板的java项目,项目的目录结构是这样的:

 构建一个web模板的java项目,项目的目录结构是这样的:

用springboot模板构建一个java项目,项目的目录结构是这样的:

对于C++来说,成熟的包管理工具(例如java的maven,Python的anaconda)和框架(有一个QT比较成熟)都比较有限,所以一个C++项目没有上面那么多模板。

在微软的vs中,创建一个C++的控制台程序,模板的目录结构是这样的:

用Vscode构建一个C++项目,其目录结构一般要写成这样:

> .vscode

> build

> include

> src

> bin

> lib

 下面我们挨个讲这6个文件夹。

二、各个文件夹的作用

2.1 .vscode

        .vscode文件夹一般应该包含三个配置文件:c_cpp_properties.json、tasks.json、launch.json。其中和CMakeList相关的是前两个文件:c_cpp_properties.json、tasks.json

1. c_cpp_properties.json

        c_cpp_properties.json是用于配置编译器环境的,这里最重要的就是includePath,其指明了C/C++标准库、用户头文件所在位置。如果我们使用的库不在includePath里面,我们需要手动添加。这样的话不需要CmakeLists.txt文件也可以编写C/C++

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/**",
                "/usr/local/**",
                "/usr/lib/**"
            ],//头文件路径
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

2.tasks.json

        tasks.json主要作用是添加构建(编译、链接等)任务。也就是说,我们除了单纯编辑源码外,要想编译、链接生成可执行文件,必须要配置这个文件。当然了,CMakeLists.txt可以替代这个文件

        创建tasks.json的文件的方法如下:

        首先,按住ctrl+shift+p打开命令行,如下图所示

        在输入框输入:

Tasks: Run task

        出现如下提示:

        回车,然后出现:

        继续回车:

        选择最下面Others选项,会生成默认的task.json。

        以下是我们常用到的task.json文件。label一般我们都设置为build,command即选择什么编译器进行编译,一般选gcc或g++,args为编译的时候用到的参数,具体可参见https://blog.csdn.net/yfldyxl/article/details/81389543

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "g++",
            "args":["-g", "${file}", "-std=c++11", "-o", "${fileBasenameNoExtension}.out"]
        }
    ]
}

3.launch.json

        launch.json主要是调试时的配置文件,也就是说如果我们单纯只是想生成可执行文件,其实这个文件没有也可以。

创建launch.json的文件的方法如下:

        点击左侧下面第4个类似于一个虫子的图标,即DEBUG

         然后点击蓝色的字体create a launch.json file:

        选择第一个C++(GDB/LLDB)即可生成一个默认的launch.json文件。

        以下是我们常用到的launch.json文件。这里面有两个参数比较重要,一个是program参数其为生成的可执行文件名,一定要与tasks.json文件中指定生成的文件名相同。还有一个是preLaunchTask,一般也要与tasks.json文件中的label一致,一般都是build

{
    // 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": "gcc build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

2.2 build文件夹

类似于java项目的target文件夹,主要用来存放生成的Makefile以及可执行文件。

2.3 include文件夹

主要用来存放我们自己编写的头文件

2.4 src文件夹

存放我们自己写的c/cpp文件

2.5 bin文件夹

存放动态链接库

2.6 lib文件夹

存放静态链接库

三、编码+编译+运行+调试 一体化

        这样构建工程以后,编辑源码、编译运行、调试(!!!)都可以在vscode中进行。

        其实对于一个庞大的C++工程,我们可以不必写上面的.vscode文件夹,因此也就不必写那3个json文件。原因在于一个庞大的C++工程如果配置tasks.json然后用gcc或g++来编译,太过麻烦,他们更适合单一的文件编译,而通常C++工程通常较为庞大,因此更推荐编写CMakeLists.txt。实际的项目中,用的也都是CMakeLists

借鉴:使用vscode创建C++工程_lovebasamessi的博客-CSDN博客_vscode创建c++项目

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值