VsCode C语言 SDL包配置 2024.9

写这篇文章的起因是,最近我需要使用 SDL 包,我懒得下载V-studio ,所以直接在VsCode 里配置C环境。我搞了好几个小时,啥都弄好了,但是一直被下面几个问题缠绕导致demo启动不了,现在我记录一下这奇葩的解决过程。所有路径都是英文。

成功图:
在这里插入图片描述


前提条件:

  1. 配置好 C/C++ 编译器/调试器 MinGW_W64 自行百度
  2. 安装好 VsCode 里面的C++ 插件(紫色那个) C/C++ for Visual Studio Code
  3. 下载SDL2-devel-2.30.6-VC 并解压 ,文件夹内容如下:
    在这里插入图片描述
  4. 创建一个空文件夹作为项目文件夹:mySdl
  5. VsCode 打开 mySdl
  6. 配置好 .vscode 里的基本文件, 确保可以运行简单的 printf 函数

我遇到的奇葩问题:
- c 文件里无法引入 #include “SDL.h” 头文件
我试过修改他们说的配置文件:

//c_cpp_properties.json"includePath": ["${workspaceFolder}/**","${default}","你的路径\\SDL2-2.30.6\\include",  //依旧找不到头文件"你的路径\\SDL2-2.30.6\\include\\**",  //依旧找不到头文件"你的路径\\SDL2-2.30.6\\include\\",  //依旧找不到头文件],

后来我他妈直接把 SDL2-2.30.6\includeSDL2-2.30.6\lib\x64 两个文件夹里的文件直接复制到 mySdl 路径下:
在这里插入图片描述

.vscode 文件配置 :
然后配置tasks.jsonargs,从命令行里链接 头文件

//tasks.json"args": ["-I", //此处链接SDL头文件"${workspaceFolder}\\include", //此处链接SDL头文件"-fdiagnostics-color=always","-L",  //此处链接lib文件夹"${workspaceFolder}\\lib", //此处链接lib文件夹"-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-lSDL2main",  //此处链接lib文件"-lSDL2"     //此处链接lib文件],

配置之后莫名其妙的好了,但是我又遇到:
找不到 SDL2main 里的函数还是什么鬼东西
奇怪的要死,我明明已经配置好了系统环境变量 Path,我还重启了2次Vscode,一次电脑。
但就是没用,就是说找不到,于是我把环境变量直接删了。

妈了个巴子,它运行起来了

总结:
我的配置方式有些小众,总之就是把 include 使用 “-I” 引入,lib文件不需要环境变量。
以下是我的全部配置: 注意一下你的 MinGW_W64 路径即可

c_cpp_properties.json
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","${default}"// "${workspaceFolder}\\include"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"cppStandard": "c++17","cStandard": "c11","compilerPath": "D:\\MinGW_W64\\mingw64\\bin\\g++.exe","intelliSenseMode": "gcc-x64"}],"version": 4
}launch.json{"version": "0.2.0","configurations": [{"type": "cppdbg","request": "launch","name": "Debug_g++.exe","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "D:\\MinGW_W64\\mingw64\\bin\\gdb.exe","setupCommands": [{"description": "gbg启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++.exe build active file"},{"name": "C/C++: gcc.exe 生成和调试活动文件","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "D:\\MinGW_W64\\mingw64\\bin\\gdb.exe","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: gcc.exe 生成活动文件"}]
}settings.json
{"C_Cpp.errorSquiggles": "disabled",
}tasks.json
{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "D:\\MinGW_W64\\mingw64\\bin\\gcc.exe","args": ["-I", //此处链接SDL头文件"${workspaceFolder}\\include", //此处链接SDL头文件"-fdiagnostics-color=always","-L",  //此处链接lib文件夹"${workspaceFolder}\\lib", //此处链接lib文件夹"-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-lSDL2main",  //此处链接lib文件"-lSDL2"     //此处链接lib文件],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}

SDL — demo

// test.c
#include "SDL.h"// 定义游戏状态
enum GameState {RUNNING,GAME_OVER
};int main(int args, char *argv[]) {// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO) < 0) {return -1;}// 创建窗口SDL_Window *window = SDL_CreateWindow("SDL2 Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN);if (!window) {return -1;}// 获取窗口表面SDL_Surface *surface = SDL_GetWindowSurface(window);if (!surface) {return -2;}// 游戏对象SDL_Rect player;player.x = 700;player.y = 10;player.w = 20;player.h = 20;SDL_Rect enemy;enemy.x = 100;enemy.y = 200;enemy.w = 30;enemy.h = 30;enum GameState state = RUNNING;while (state == RUNNING) {SDL_Event event;while (SDL_PollEvent(&event)) {if (event.type == SDL_QUIT) {state = GAME_OVER;}}// 玩家移动逻辑const Uint8 *keystates = SDL_GetKeyboardState(NULL);if (keystates[SDL_SCANCODE_UP]) {player.y -= 5;}if (keystates[SDL_SCANCODE_DOWN]) {player.y += 5;}if (keystates[SDL_SCANCODE_LEFT]) {player.x -= 5;}if (keystates[SDL_SCANCODE_RIGHT]) {player.x += 5;}// 敌人移动逻辑enemy.x += 3;if (enemy.x > 800) {enemy.x = 0;}// // 检测碰撞// if ((player.x < enemy.x + enemy.w && player.x + player.w > enemy.x &&//      player.y < enemy.y + enemy.h && player.y + player.h > enemy.y)) {//     state = GAME_OVER;// }// 绘制玩家和敌人SDL_FillRect(surface, &player, SDL_MapRGB(surface->format, 180, 10, 140));SDL_FillRect(surface, &enemy, SDL_MapRGB(surface->format, 10, 200, 120));// 更新窗口表面SDL_UpdateWindowSurface(window);SDL_Delay((1.0 / 60) * 1000);}// 游戏结束时的清理SDL_FreeSurface(surface);SDL_DestroyWindow(window);SDL_Quit();return 0;
}

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

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

相关文章

Qt Debugging帮助文档

Qt中给断点添加条件&#xff1a; 示例1&#xff1a; 当i10时&#xff0c;程序中断 但不知道为什么&#xff0c;46行的条件没有生效&#xff0c;47行的条件生效了 给断点添加忽略次数&#xff1a; 在程序停止之前忽略该断点200次。 Breakpoints (Debugging with GDB)

Apache Doris 实践

Apache Doris 实践 官方使用指南&#xff1a;https://doris.incubator.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/ 手动安装 下载二进制安装包https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.5-bin-x64.tar.gz …

华润电力最新校招社招润择认知能力测评:逻辑推理数字计算语言理解高分攻略

​ 尊敬的求职者们&#xff0c; 在您准备加入华润电力这个大家庭之前&#xff0c;了解其招聘测评的详细流程和要求是至关重要的。以下是我们为您整理的测评系统核心内容&#xff0c;希望对您的求职之旅有所帮助。 测评系统概览 华润电力的招聘测评系统旨在全面评估求职者的认…

机器学习04-逻辑回归(python)-02原理与损失函数

1. 逻辑回归概念 逻辑回归&#xff08;Logistic Regression&#xff09; 是一种 分类模型&#xff0c;主要用于解决 二分类问题&#xff08;即分成两类&#xff0c;如是否通过、是否患病等&#xff09;。逻辑回归的目标是根据输入的特征预测一个 概率&#xff0c;这个概率值介于…

计算机毕业设计hadoop+spark+hive新能源汽车销售数据分析系统 二手车销量分析 新能源汽车推荐系统 可视化大屏 汽车爬虫 机器学习

《HadoopSparkHive新能源汽车销售数据分析系统》开题报告 一、选题背景与意义 1.1 选题背景 随着全球对环境保护意识的增强和能源结构的转型&#xff0c;新能源汽车市场迅速崛起。新能源汽车的销售数据不仅反映了市场趋势和消费者偏好&#xff0c;还为企业决策、政府监管和政…

微服务——网关登录校验(一)

1.网关登录校验 微服务中的网关登录校验是微服务架构中常见的一种安全机制&#xff0c;用于在请求到达微服务之前&#xff0c;对用户的身份进行验证&#xff0c;确保只有合法的用户才能访问相应的服务。 在微服务架构中&#xff0c;每个微服务都是独立部署的&#xff0c;它们之…

(C++17) optional 的 3 种用法

文章目录 *️⃣前言*️⃣3 种主流用法1️⃣函数返回值2️⃣函数参数3️⃣类成员 ⭐END&#x1f31f;跋&#x1f31f;交流方式 *️⃣前言 在 C17 中标准化了 std::optional。该类型可以容纳一种类型&#xff0c;且判断是否有无。 若使用的标准在低于 C17 则可以使用 Abseil 的…

浅谈递推法

递推法 递推法是一种数学方法&#xff0c;用于通过利用已知的初始条件和递推关系来计算要求中的每一项。以数列来举例&#xff0c;在递推法中&#xff0c;它的思想很简单&#xff1a;我们首先知道数列的第一项&#xff08;初始条件&#xff09;&#xff0c;然后通过一个规律&a…

GEE 数据集:人类造成的热带潮湿森林退化程度的估计

目录 简介 摘要 代码 结论 数据和代码 引用 网址推荐 0代码在线构建地图应用 机器学习 人类造成的热带潮湿森林退化程度超出了先前的估计 简介 选择性采伐、火灾和边缘效应造成的热带森林退化是碳和生物多样性损失的主要驱动因素1,2,3,其年增长率可与森林砍伐相媲美…

Golang | Leetcode Golang题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; func characterReplacement(s string, k int) int {cnt : [26]int{}maxCnt, left : 0, 0for right, ch : range s {cnt[ch-A]maxCnt max(maxCnt, cnt[ch-A])if right-left1-maxCnt > k {cnt[s[left]-A]--left}}return len(s) - left }f…

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物&#xff0c;那么便到不了终点“ 1.题目 下方是力扣官方题目的地址 63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下…

【全网最全】2024年华为杯研赛A题成品论文获取入口(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/hMgWngXvcQhttps://qm.qq.com/q/hMgWngXvcQ你是否在寻找数学建模比赛的突破点&am…

BUUCTF逆向wp [WUSTCTF2020]Cr0ssfun

第一步 查壳&#xff0c;本题是64位&#xff0c;无壳。 第二步 查看主函数&#xff0c;点开看主函数&#xff0c;没什么东西。 左边表里面看到好几个i开头的函数&#xff08;红色方框里面&#xff09;&#xff0c;点开看后每个函数的最后末尾&#xff08;图中红色椭圆圈那里&a…

(笔记自用)位运算总结+LeetCode例题:颠倒二进制位+位1的个数

一.位运算总结: 在解题之前理解一下为什么需要位运算&#xff1f;它的本质是什么&#xff1f; 力扣上不少位运算相关的题&#xff0c;并且很多题也会用到位运算的技巧。这又是为什么&#xff1f; 位运算的由来 在计算机里面&#xff0c;任何数据最终都是用数字来表示的&…

在Java中基于GeoTools的Shapefile读取乱码的问题解决办法

目录 前言 1、Shapefile属性字段编码的情况&#xff1a; 一、Shp文件常见的字符集编码 1、System编码 2、ISO-8859-1编码 3、UTF-8编码 二、GeoTools解析实战 1、未进行字符处理 2、乱码问题的解决 3、转码支持 4、属性字段编码结果 三、总结 前言 文件编码&#x…

分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)

文章目录 1、lua脚本入门1.1、变量&#xff1a;弱类型1.2、流程控制1.3、在lua中执行redis指令1.4、实战&#xff1a;先判断是否自己的锁&#xff0c;如果是才能删除 2、AlbumInfoApiController --》testLock()3、AlbumInfoServiceImpl --》testLock() 1、lua脚本入门 Lua 教程…

Linux基础命令以及常识

镜像站点服务器&#xff08;相当于下载的网址&#xff09;也可叫软件源 vim /etc/apt/sources.list 索引文件(网络服务器在本地的缓存) 服务器软件源在本地列出来一个清单&#xff0c;以便于主机进行查询操作 cd /var/lib/apt/lists/ 下载软件包默认存放路径 cd /var/cache/a…

认识NDK

什么是NDK&#xff08;Native Development Kit&#xff09; The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C. &emdp; Android NDK 是一个工具集&#xff0c;可让您使用 C 和 C 等语言以原生代…

重型工程车辆数据集

重型工程车辆数据集&#xff0c;内含Bull_dozer&#xff08;推土机&#xff09;, Dumb_truck&#xff08;卡车&#xff09;, Excavator&#xff08;挖掘机&#xff09;, Grader&#xff08;平地机&#xff09;, Loader&#xff08;转载机&#xff09;, Mobile_crane&#xff08…

『功能项目』QFrameWork拾取道具UGUI【69】

本章项目成果展示 我们打开上一篇68QFrameWork扔到地上UGUI的项目&#xff0c; 本章要做的事情是实现当物品在地上时&#xff0c;点击物品将对应物品转移到道具栏中 制作一个提示UI界面 添加Button组件设置为点击即将父物体隐藏 拖拽到文件夹中在场景中删除 创建脚本&#xf…