【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)

news2024/11/19 18:24:33

除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.jsontasks.json 文件。


目录

一、下载编译器

1、下载 Windows GCC

2、选择编译器路径

二、配置 debug 环境

1、配置 lauch.json 文件

2、配置 tasks.json 文件

三、编译工程

1、测试工程结构

2、开始编译 


一、下载编译器

1、下载 Windows GCC

这里是在Windows环境下,所以下载的是 Windows 环境使用的 gcc 编译器。

下载地址: MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

下载完毕后解压,并将 bin 目录添加到环境变量。bin 目录下有几个比较重要的执行文件

2、选择编译器路径

将 bin 目录添加到环境变量后,Ctrl + Shift + P 通过 UI 选择编译器路径  

二、配置 debug 环境

配置文件 launch.json 和 tasks.json 都在 .vscode 目录下。其他目录可暂时不理会。

1、配置 lauch.json 文件

主要参数说明:

  • program:  可执行文件的完整路径。这里的执行文件名必须和cmake生成的执行文件名一致
  • miDebuggerPath: 调试器的完整路径。(即便添加了环境变量也需要填入完整路径)
  • preLaunchTask:调试前要做的操作,会去tasks.json 文件中找对应的标签。cmake工程在调试之前一般需要 cmake .. ,然后再 make 生成执行文件
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++ Runner: Debug Session",           // 配置名称(调试时会在下拉菜单中显示)
      "type": "cppdbg",                                
      "request": "launch",       
      "program": "${workspaceFolder}/build/testProj.exe",  // 执行文件的完整路径(这里的执行文件名必须和cmake生成的执行文件名一致)
      "args": [],                                      // 执行文件运行时,传递给执行文件的命令行参数
      "stopAtEntry": false,                            // 一般设为false,设为true时会将程序暂停在程序入口
      "externalConsole": true,                         // 一般设为true,表示调试时显示控制台
      "cwd": "${workspaceFolder}",                     // 调试程序的工作目录,一般为 ${workspaceFolder} 即代码所在目录
      "MIMode": "gdb",
      "miDebuggerPath": "D:/Download/Windows GCC/x86_64-7.3.0-release-win32-sjlj-rt_v5-rev0/mingw64/bin/gdb.exe", // 使用的调试器的全路径
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "build",   // 表示调试前要做的操作,这里的build只是一个标签,标签内容在 tasks.json 中
    }
  ]
}

2、配置 tasks.json 文件

这里注意 -G MinGW Makefiles,如果不加这个选项,默认会按照 Visual Studio 的标准进行编译,生成的文件如下: 

很显然这并不是我们期望的,我希望生成的是 Makefile 文件,因此这里需要加上  -G MinGW Makefiles 选项,生成 mingw32-make 能够编译的Makefile。生成的文件如下: 

{
    "tasks": [
        {
            "label": "build",       // build 操作
            "dependsOn":[
                "cmake",            // build 操作依赖于 cmake 和 make 操作
                "make"
            ]
        },
        {
            "label": "cmake",         // cmake 操作
            "type":"shell",           
            "command":"cmake",        // 执行 cmake 操作所使用的命令
            "args": [                 // cmake 命令执行时的命令行参数
                "-G MinGW Makefiles", // 生成 mingw32-make 能够编译的Makefile
                "../"
            ],
        },
        {
            "label": "make",                // make 操作
            "command":"mingw32-make.exe",   // 执行 make 操作所使用的命令(mingw32-make.exe已经添加了环境变量)
            "args": [
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"     // 表示执行当前操作的工作目录
            }
        },
    ],
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"     // 表示执行上述操作时的工作目录
    },
}

三、编译工程

1、测试工程结构

因为是使用配置文件配置,需要在 CMakeLists.txt 的同级目录下创建一个 build 目录

CMakeLists.txt

cmake_minimum_required(VERSION 3.15.0)
project(testProj)

file(GLOB ALL_SOURCES *.cpp *.h)

add_executable(${PROJECT_NAME} ${ALL_SOURCES})

main.cpp

#include <iostream>

int main(void)
{
    printf("hello world \n");
    return 0;
}

2、开始编译 

点击 Start Debugging 或者按 F5 就可以开始编译了。

第一次编译会报错,因为一开始 build 目录为空,cmake 还未执行完,make 操作就已经先运行了,所以会出现找不到 Makefile 的问题。

F5 再次编译,这个时候不出意外的话就会编译通过了

参考文章: 

04-vscode搭建cmake的编译环境_vscode配置cmake编译-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA project : flash_write

本实验重点学习了&#xff1a; flash的页编程指令pp。 在写之前要先进行擦除&#xff08;全擦除和页擦除&#xff09;&#xff1b; 本实验&#xff1a;先传写指令&#xff0c;然后进入写锁存周期&#xff0c;然后传页编程指令&#xff0c;3个地址&#xff1b; 然后传数据&a…

分布式事务协调中间件---seata快速入门

分布式事务 Seata&#xff0c;之前叫做Fescar&#xff0c;是一个开源的分布式事务解决方案&#xff0c;它主要致力于提供高效和简单的分布式事务服务。Seata主要用于解决微服务架构下的数据一致性问题。 Seata 的基本原理是基于两阶段提交 (2PC) 以及三阶段提交 (3PC)&#xff…

Linux 学习的六个过程

Linux 上手难&#xff0c;学习曲线陡峭&#xff0c;所以它的学习过程更像一个爬坡模式。这些坡看起来都很陡&#xff0c;但是一旦爬上一阶&#xff0c;就会一马平川。 1、抛弃旧的思维习惯&#xff0c;熟练使用 Linux 命令行 在 Linux 中&#xff0c;无论我们做什么事情&…

快速排序、归并排序、基数排序

快速排序 算法思想 图 1-1 即确定一个基准值&#xff08;一般为数组中间位置的元素&#xff0c;或者自定义&#xff09;&#xff0c;让待排序数组中所有比基准值小的元素放到基准值左边的位置&#xff0c;所有比基准值大的元素放到基准值右边的位置&#xff0c;这样一趟排序下…

Rxjava3 全新详解及常用操作符

简介 RxJava 是一个基于 Java 的响应式编程库&#xff0c;用于处理异步事件流和数据流。它是由 Netflix 开发并开源&#xff0c;现在广泛用于 Android 和 Java 后端开发。RxJava 提供了一种用于组合和处理异步数据的丰富工具集&#xff0c;它的核心思想是将数据流视为一系列事…

Hadoop3教程(十):MapReduce中的InputFormat

文章目录 &#xff08;87&#xff09;切片机制与MapTask并行度决定机制&#xff08;90&#xff09; 切片源码总结&#xff08;91&#xff09;FileInputFormat切片机制&#xff08;92&#xff09;TextInputFormat及其他实现类一览&#xff08;93&#xff09; CombineTextInputFo…

深入解析C语言中的strstr函数

目录 一&#xff0c;strstr函数简介 二&#xff0c;strstr函数实现原理 三&#xff0c;strstr函数的用法 四&#xff0c;strstr函数的注意事项 五&#xff0c;strstr函数的模拟实现 一&#xff0c;strstr函数简介 strstr函数是在一个字符串中查找另一个字符串的第一次出现&…

QT6集成CEF3--01 准备工作

QT6集成CEF3--01 准备工作 一、所有使用到的工具软件清单:二、准备工作三、cefclient示例程序四、特别注意 一、所有使用到的工具软件清单: CEF 二进制发行包 cef_binary_117.2.5gda4c36achromium-117.0.5938.152_windows64.tar.bz2 CMake 编译工具 cmake-3.22.6-windows-x86_…

实践笔记-docker安装及配置镜像源

docker安装及配置镜像源 1.卸载旧版本docker2. 安装yum工具3. 设置镜像仓库4.安装docker5. 启动docker服务6.docker镜像源配置 当前环境linux为centos7 1.卸载旧版本docker 如果以前安装过旧版本可以先执行卸载&#xff0c;下面的截图是没有安装过。 yum remove docker \ do…

DID赛道前列的生物识别技术,开启Web3时代的大门—MXT

互联网发展的十字路口 互联网从上世纪90年代初发展至今&#xff0c;历经30年&#xff0c;她改变了整个人类的生活方式、沟通形式以及社会发展模式&#xff0c;她的影响早已渗透到了世界的各个角落。而如今&#xff0c;我们似乎正站在一个新的十字路口&#xff0c;一个互联网将…

端口被谁占用如何解决?

## 如何查看端口被谁占用了&#xff1f;你好,我是Hasity 今天分享的内容是&#xff1a;Windows/Linux端口被占用如何解决? 问题出现 Description:Web server failed to start. Port 8082 was already in use.Action:Identify and stop the process thats listening on port 8…

mp4文件怎样提取mp3音频文件

Mp4视频文件怎样提取mp3等音频文件呢&#xff1f; 推荐一个免费网址&#xff0c;且不用任何注册&#xff0c;直接可以使用 https://audio-extractor.net/cn/ 上传视频&#xff0c;选择转换的音频格式&#xff0c; 更多格式&#xff0c;包括如下&#xff1a; 转换文件完成后…

【JavaEE】初识网络

网络初识 文章目录 网络初识网络发展史独立模式网络互连局域网LAN广域网 网络通信基础IP地址端口号格式 协议五元组协议分层OSI七层模型TCP/IP五&#xff08;四&#xff09;层协议1.物理层2.数据链路层3.网络层4.传输层5.应用程序 网络设备所在的分层封装和分用例子发送方接收方…

PyTorch入门教学——dir()函数和help()函数的应用

1、简介 已知PyTorch是一个工具包&#xff0c;其中包含许多功能函数。dir()函数和help()函数是学习PyTorch包的重要法宝。 dir()&#xff1a;能让我们知道工具包以及工具包中的分隔区有什么东西。help()&#xff1a;能让我们知道每个工具是如何使用的&#xff0c;即工具的使用…

Redis数据序列化器

Redis序列化 Redis 数据序列化器用于将数据在存储到 Redis 中时进行序列化&#xff08;编码&#xff09;和反序列化&#xff08;解码&#xff09;。 RedisTemplate的两种序列化实践方案&#xff1a; 方案一&#xff1a; 自定义RedisTemplate 修改RedisTemplate的序列化器为…

从一到无穷大 #18 时序数据库运营SLI思考

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 公有云时序数据库SLA 运营商产品每服务周期服务可用率不低于99.9%衡量服务不可用数据指标从采…

SpringAOP是什么?为什么要有SpringAOP?

SpringAOP是什么&#xff1f;为什么要有SpringAOP&#xff1f; 原文&#xff1a;SpringAOP是什么&#xff1f;为什么要有SpringAOP&#xff1f; 一、有SpringAOP之前 简单的开发场景&#xff0c;只需要写简单的业务逻辑&#xff0c;比如CRUD 但是在执行具体的逻辑之前&…

【论文精读】NMP: End-to-end Interpretable Neural Motion Planner

toc 1 背景信息 团队&#xff1a;Uber&#xff0c;多伦大大学 年份&#xff1a;2019 论文链接&#xff1a;https://arxiv.org/abs/2101.06679 2 Motivation 深度学习方案受限于累积误差suffers from the compounding error&#xff0c;而且可解释性差interpretability is d…

如何设计一个ToC的弹窗

本文主要分享了如何设计一个具有高可扩展性的弹窗功能。 本设计参考了优惠券功能的设计思路&#xff0c;有兴趣的朋友可以看看优惠券的分享&#xff1a;如何设计一个可扩展的优惠券功能_java优惠券系统设计-CSDN博客 一、需求介绍 假如你的项目需要实现以下弹窗&#xff0c;…

排序算法-合并排序法(MergeSort)

排序算法-合并排序法&#xff08;MergeSort&#xff09; 1、说明 合并排序法&#xff08;MergeSort&#xff09;是针对已排序好的两个或两个以上的数列&#xff08;或数据文件&#xff09;&#xff0c;通过合并的方式将其组合成一个大的且已排好序的数列&#xff08;或数据文…