VsCode C语言 SDL包配置 2024.9

news/2024/9/25 7:06:36/

写这篇文章的起因是,最近我需要使用 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.ppmy.cn/news/1530170.html

相关文章

遨游信息技术的浩瀚宇宙:探索MySQL的深邃奥秘

遨游信息技术的浩瀚宇宙&#xff1a;探索MySQL的深邃奥秘 在信息技术的浩瀚宇宙中&#xff0c;MySQL犹如一颗璀璨的星辰&#xff0c;以其稳定、高效、灵活的特性&#xff0c;照亮了无数开发者与数据管理者的前行之路。作为关系型数据库管理系统的佼佼者&#xff0c;MySQL不仅承…

使用数据泵(Data Pump)迁移Oracle数据库数据

目的 将一个oracle数据库实例数据复制给另一个实例 注意事项 sqlplus&#xff08;即在本机linux环境下执行sql&#xff09;、expdp、impdp等命令一般需要切换到oracle用户才能执行 如果你当前是linux的root用户&#xff0c;请切换用户 su - oracle //一般在oracle账号下才能…

新手教学系列——为表格行增加倒计时列

在现代网页开发中,许多应用场景都需要显示倒计时功能,例如在线促销的限时抢购、拍卖会的剩余时间、或是订单支付的有效期。这类倒计时信息通常以动态的形式展现在表格中,随着时间的流逝,倒计时也会自动更新。这篇文章将带你一步步实现一个动态倒计时表格功能,展示如何为表…

【RabbitMQ】⾼级特性

RabbitMQ ⾼级特性 1. 消息确认1.1 消息确认机制1.2 代码示例 2. 持久化2.1 交换机持久化2.2 队列持久化2.3 消息持久化 3. 发送⽅确认3.1 confirm确认模式3.2 return退回模式3.3 问题: 如何保证RabbitMQ消息的可靠传输? 4. 重试机制5. TTL5.1 设置消息的TTL5.2 设置队列的TTL…

速度与安全:边缘计算如何改变游戏规则

Ⅰ初探边缘计算 1. 边缘计算是什么&#xff1f; 边缘计算&#xff0c;就像是城市里的便利店&#xff0c;它让数据处理不再需要长途跋涉到市中心的“超级计算机”超市&#xff0c;而是在你身边的每个角落就能快速完成。想象一下&#xff0c;你急需一杯冰咖啡&#xff0c;边缘计…

DVWA 靶场环境搭建

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/15 09:30 什么是DVWA: 是OWSASP官方编写的PHP网站&#xff0c;包含了各种网站常见漏洞&#xff08;漏洞靶场&#xff09;&#xff0c;可以学习攻击及修复方式。 PHP环境包含了&#xff0c;Windows/Apache/Mysql/Php g…

【java实现json转化为CSV文件】

文章目录 JSON文件中的数据格式测试文件转换的接口 JSON文件中的数据格式 单条数据展开后如下&#xff1a; {"text": "《邪少兵王》是冰火未央写的网络小说连载于旗峰天下","spo_list":[{"predicate": "作者", "objec…

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

低代码引擎使能开发者定制低代码平台。它是低代码平台的底座&#xff0c;提供可视化搭建页面等基础能力&#xff0c;既可以通过线上搭配组合&#xff0c;也可以通过cli创建个人工程进行二次开发&#xff0c;实时定制出自己的低代码平台。适用于多场景的低代码平台开发&#xff…