vscode 配置opengl (glut), lib链接可参考

这里假定你已经配置好基础的vscode c++环境

json介绍

这里其实主要配置的3种json, vscode其实就是通过launch.json和tasks.json来自动生成指令的

  • launch.json

这个用于启动程序用的,但是由于其可以指定preLaunchTask-即在启动之前需要做什么事情,所以这里用来启动编译-链接到最后启动程序等一系列过程
我们可以看到图中左上角,每一个启动方式(c/c++ Runner:Debug Session和c/c++ glut)其实都对应"configurations"数组中的一个json的name属性
在这里插入图片描述

而在这里,我们启动了cmd(program),让cmd去调用我们生成好的程序(args),并且调用完成后再调用pause指令,我们通过preLaunchTask所指向的task完成程序的编译等操作

  • tasks.json

本json中就存放了各种task,每个task都对应一个json,而preLaunchTask就是通过这里每个json的label属性来找是哪个task,这里我们就让task去做3件事情:1.编译,2.链接,3.复制dll

  • c_cpp_properties.json

这个json和程序生成与运行无关,他是用来配置intellisense,这个配置错了,你写代码会有报错,但是编译和生成这些还是正常的,一般就需要注意一下standard和includePath就行
在这里插入图片描述

配置freeglut

  • 下载地址:https://www.transmissionzero.co.uk/software/freeglut-devel/

  • 注意选择mingw

在这里插入图片描述

  • 下载完毕选择一个地方安装解压即可

其中
bin中的dll是运行时需要的
include是编译时需要的,包含目录
lib是连接是需要的,库目录

修改task.json

  • 这里主要通过command后面的指令+args中的参数组成一整个命令行语句然后调用
  • 此外,通过dependsOn 来构成task之间的依赖

创建编译任务 compile

  • 这里command为你的g++.exe的路径,若你将g++的目录添加到了环境变量中,则可以直接使用g++
  • 而args就是各个编译参数:

-I<Include_path>引入包含文件夹,用于编译
-c 指定编译源文件,-o 指定输出的文件,这里生成中间文件.o

  • 可参考代码如下
 {"type": "cppbuild","label": "glut compile","command": "E:/MinGW/bin/g++.exe","args": ["-IE:\\CPP\\OpenGL\\freeglut-MinGW-3.0.0-1.mp\\freeglut\\include","-fdiagnostics-color=always","-g3","-c","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.o","--std","c++17",],"options": {"cwd": "E:/MinGW/bin"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"},

创建连接任务 link

  • 类似编译,这里同样command为g++,只是args变成链接的参数了,具体为g++ x.o -o y.exe,将x.o链接生成y.exe
  • 那这里既然要链接,就要引入库目录,对应lib目录,指令:-L<lib_path>, 同时要引入库, 指令: -l<lib_name>, 这里lib_name注意不要前面的lib
  • 同时这里本人踩了大坑,g++编译时, -l<lib_name> 必须要放在源文件后面,推荐直接放最后面,不然它还是链接不上
  • 同时你链接需要.o,所以该task, “dependsOn”: [“glut compile”] (上一节的名字)
  • 可参考代码如下:
{"type": "process","label": "glut link","command": "E:/MinGW/bin/g++.exe","args": ["-fdiagnostics-color=always","-g3","${fileDirname}\\${fileBasenameNoExtension}.o","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","--std","c++17","-LE:\\CPP\\OpenGL\\freeglut-MinGW-3.0.0-1.mp\\freeglut\\lib\\","-lopengl32", "-lglu32", "-lfreeglut",],"options": {"cwd": "E:/MinGW/bin"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。","dependsOn": ["glut compile"]},

创建移动lib任务 setup

  • 最后要将dll移动到你生成exe的目录下
  • 这里我们使用xcopy指令,注意command
  • 同时"dependsOn": [“glut link”]
  • 参考代码如下:
{"type": "process","label": "glut setup","command": "xcopy","args": ["/y","/d","E:\\CPP\\OpenGL\\freeglut-MinGW-3.0.0-1.mp\\freeglut\\bin\\freeglut.dll","${fileDirname}\\"],"options": {"cwd": "E:/MinGW/bin"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。","dependsOn": ["glut link"]},

修改launch.json

  • 最后在launch.json 添加我们的启动json即可
  • 启动的程序为cmd.exe
  • 然后args, 通过cmd调用我们生成的exe,并最后pause
  • 通过 “preLaunchTask”: “glut setup” 来调用我们的task链条
  • 参考代码:
 {"name": "C/C++ glut","type": "cppdbg","request": "launch","stopAtEntry": false,"externalConsole": true,"cwd": "e:/CPP/testVsCode","program": "C:\\Windows\\System32\\cmd.exe","args":["/C", "${fileDirname}\\${fileBasenameNoExtension}.exe", "&","pause"],"MIMode": "gdb","miDebuggerPath": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "glut setup"}
  • 最后找到对应位置即可编译生成啦
    在这里插入图片描述

补充

  • vscode运行c++时,若想运行在独立控制窗口,那么为了避免窗口瞬间关闭看不到输出,可以使用cmd来调用程序,但是这样会命中不了断点。若想命中断点,且能看到输出,要不用内置控制台,要不在代码末尾补个getchar()

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

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

相关文章

Gradle多模块实践:dependencies的模组化导入

虽然maven和gradle能够自动处理依赖&#xff0c;但是觉得还不够。 当java引入一个新组件时。如果全部引入&#xff0c;则会导致引入过多的jar&#xff1b;如果指定组件的各个模块&#xff0c;又需要逐条引入&#xff0c;尤其当需要其它模块支持时&#xff0c;当子模块多了后维…

白嫖阿里云DSW做AI绘画的几点技巧(老鸟参考,新手免入)

白嫖方法就不说了&#xff0c;选择A10显卡或者V100显卡&#xff0c;能画些图&#xff0c;还能用三个月。可以感受一下顶级显卡的速度&#xff0c;当生产力工具肯定是不行的&#xff0c;毕竟5000个使用量用起来很快的。 问题一&#xff1a; 镜像版本选择-官方提供二个镜像&…

《LeetCode力扣练习》代码随想录——二叉树(左叶子之和---Java)

《LeetCode力扣练习》代码随想录——二叉树&#xff08;左叶子之和—Java&#xff09; 刷题思路来源于 代码随想录 404. 左叶子之和 二叉树-后序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode…

Windows wget安装与使用

wget安装 链接&#xff1a; https://eternallybored.org/misc/wget/ 下载了ZIP格式&#xff0c;但是解压后发现exe文件无法解压&#xff0c;所以直接下载了exe文件。 下载后将exe文件放至路径&#xff1a;C:\Windows\System32 winR → cmd 输入&#xff1a; wget --help&…

Unity笔记:C#基础(1)

杂项 虚函数 CSDN - C虚函数详解 cnblog - C#中的虚函数virtual 常量池与new 在C#中&#xff0c;string是不可变的&#xff0c;这意味着对string对象的操作通常会返回一个新的string对象&#xff0c;而不会修改原始的string对象。因此&#xff0c;几乎所有涉及更改string内…

鞋服品牌怎样合理把控订货深度和宽度

在鞋服品牌的运营管理中&#xff0c;订货深度和宽度是两个至关重要的概念。订货深度指的是某一款式或规格的产品数量&#xff0c;而订货宽度则代表品牌所涵盖的产品种类和款式。合理把控订货深度和宽度对于品牌的库存管理、销售情况以及顾客满意度都有着深远的影响。本文将探讨…

【牛客】VL74 异步复位同步释放

描述 题目描述&#xff1a; 请使用异步复位同步释放来将输入数据a存储到寄存器中&#xff0c;并画图说明异步复位同步释放的机制原理 信号示意图&#xff1a; clk为时钟 rst_n为低电平复位 d信号输入 dout信号输出 波形示意图&#xff1a; 输入描述&#xff1a; clk为时…

Qt: 事件过滤器的更多用法

不懂事件循环怎么回事的可以看下面的文章 Qt事件循环完整流程 常规使用 定义一个窗口MainWindow &#xff0c;之后在窗口里添加一个事件过滤函数eventFilter&#xff0c;将窗口的某一个或一些字控件安装上事件过滤器。 这种情况下MainWindow 就是pushButton11的时间过滤器&am…

MRI基础--k空间特性

目录 k空间中心亮的原因 k空间中心和边缘信号幅值比较 参考文献 k空间中心亮的原因 k空间的正中点是kx = ky = 0的点。该位置对应于图像的傅里叶表示中的常数项,其大小与平均图像亮度相同。该中心点具有 k 空间中任何其他点的最高幅度,最好在 3D 表示中看到。<

AcWing 107. 超快速排序

#include<bits/stdc.h>using namespace std;typedef long long LL;const int N50000010;//a 是原来的数组&#xff0c;temp 是临时数组 int a[N],temp[N];//因为元素有 500000 个&#xff0c;逆序对的数目可能会非常多 //假设按照降序排列&#xff0c;那么将有 n(n-1)(n-…

许多人可能还不了解这个信息差:美赛的第一批 EI 已经录用,不用再犹豫啦

格局打开&#xff0c;美赛论文转学术论文发表 &#x1f680;&#x1f680; 各位同学&#xff0c;美赛已经结束了一段时间&#xff0c;你们是否还在焦急地等待最终成绩的公布&#xff1f;一些有远见的同学已经提前收到了一份喜讯&#xff1a;他们的美赛论文已被转化为学术论文并…

MySQL深入——25

Join语句如何优化? Join语句的两种算法&#xff0c;分别为Index Nested-Loop Join和Block Nested-Loop Join NLJ在大表Join当中还不错&#xff0c;但BNL在大表join时性能就差很多&#xff0c;很耗CPU资源。 如何优化这两个算法 创建t1&#xff0c;t2算法&#xff0c;在t1中…

Gitlab部署流程

安装准备 需要开启ssh&#xff1a;&#xff08;已开启可跳过&#xff09; sudo systemctl status sshd sudo systemctl enable sshd sudo systemctl start sshd防火墙开放http、https服务&#xff1a;&#xff08;已关闭防火墙可跳过&#xff09; sudo systemctl status fir…

CPU设计实战-加载和存储指令(2)

目录 一 ll和sc指令说明 二 ll和sc指令的实现 1 llbit寄存器 2 译码阶段 3 访存阶段 4 Load相关问题 5 流水线在取指阶段暂停 本章介绍两个比较特殊的加载存储指令ll和sc&#xff0c;这两个指令的存在用于实现信号量机制。 信号量机制&#xff1a;在多线程中为了保证某个…

smplx pkl格式可视化

smplx pkl格式可视化 import glob import os import pickleimport torch import numpy as npfrom smplpytorch.pytorch.smpl_layer import SMPL_Layer from display_utils import display_model, display_model_continuousfrom matplotlib import pyplot as plt from matplotl…

P1551 亲戚题解

题目 若某个家族人员过于庞大&#xff0c;要判断两个是否是亲戚&#xff0c;确实还很不容易&#xff0c;现在给出某个亲戚关系图&#xff0c;求任意给出的两个人是否具有亲戚关系。规定&#xff1a;x 和y是亲戚&#xff0c;y和z是亲戚&#xff0c;那么x和z也是亲戚。如果x&…

社区服务类创业项目推荐:抓住社区商业新机遇

大家好&#xff0c;我是一名90后鲜奶吧创业者&#xff0c;目前在社区经营5年时间&#xff0c;今天我想和大家分享一些关于社区服务类创业项目的推荐&#xff0c;都是这么多年我见证过生意最好的店面。 1、社区便利店&#xff1a; 随着人们生活节奏的加快&#xff0c;对便利购…

【Linux实践室】Linux常用命令:文件操作|文件夹操作

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

2024年第二届智能制造与自动化前沿国际会议 | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第二届智能制造与自动化前沿国际会议&#xff08;CFIMA 2024&#xff09; 会议时间&#xff1a;2024年8月23 -25日 召开地点&#xff1a;中国包头 大会官网&#xff1a;www.cfima.org 随着全球新一轮科技革命和产业变革突飞猛进&#xff0c;…

Java Web开发---复试Tips复习

***********&#xff08;自用&#xff0c;摘录自各种文章和自己总结&#xff09;********** 小知识点理解 Web Web应用开发主要是基于浏览器的应用程序开发。一个Web应用由多部分组成 java web就是用java语言开发出可在万维网上浏览的程序 Web应用程序编写完后&#xff0c;…