开发环境搭建:Visual Studio / GCC + CMake 配置,SDL2/GLFW 库的引入,第一个游戏窗口
说实话,很多初学者在学C语言游戏开发时,第一步就卡在了环境搭建上。我见过太多人兴致勃勃地打开教程,结果折腾了两天连个窗口都没弹出来,最后放弃了。嗯,这其实挺可惜的。
今天我就带你走一遍完整的搭建流程。我会同时讲Windows和Linux两种方案,你根据自己的情况选一种就行。我个人习惯用Visual Studio做Windows开发,但如果你喜欢跨平台,GCC + CMake的组合会更灵活。
一、编译器选择:Visual Studio 还是 GCC?
先说说这两个东西的区别。Visual Studio是微软的亲儿子,Windows上开发体验最好,调试器强大,装好就能用。GCC是开源世界的标配,配合CMake可以一套代码跑遍Windows、Linux、macOS。
我的建议很简单:
- 如果你只用Windows,直接上Visual Studio 2022 Community版,免费,省心。
- 如果你要跨平台,或者你用的是Linux/Mac,那就GCC + CMake。
- 如果你不确定,我推荐你先用Visual Studio,等后面熟悉了再切CMake。
二、Visual Studio 配置步骤
好,我们先讲Visual Studio的方案。你想想看,装个VS其实很简单,但有几个坑我得提前告诉你。
2.1 安装Visual Studio
- 去官网下载Visual Studio 2022 Community版。
- 安装时,工作负载勾选「使用C++的桌面开发」。
- 右侧的「可选」组件里,确保勾选了「Windows 10/11 SDK」和「C++ CMake工具」。
- 安装完成后,重启电脑。
这里有个坑:很多人装完VS发现找不到C++编译器,其实就是没勾选那个工作负载。我曾经帮一个同事排查了半天,结果发现他装的是VS Code,不是Visual Studio……嗯,这两个东西名字像,但完全不是一回事。
2.2 引入SDL2库
SDL2是什么?说白了就是一个帮你操作窗口、键盘、鼠标、音频的库。我们不需要自己写Windows API去创建窗口,SDL2把这些脏活累活都包了。
引入SDL2有两种方式:
方式一:手动下载配置(推荐新手)
- 去SDL官网下载「SDL2-devel-2.xx.x-VC.zip」这个包。
- 解压后,把里面的 include 和 lib 文件夹放到你的项目目录里。
- 在VS项目属性中配置:
- C/C++ → 附加包含目录 → 添加 include 文件夹路径
- 链接器 → 附加库目录 → 添加 lib 文件夹路径
- 链接器 → 输入 → 附加依赖项 → 添加 SDL2.lib; SDL2main.lib
- 把 SDL2.dll 复制到你的 exe 输出目录。
方式二:使用vcpkg(推荐老手)
如果你装了vcpkg,一行命令搞定:
vcpkg install sdl2:x64-windows
然后在VS里打开「项目属性」→ 配置为使用vcpkg即可。我个人现在都用这种方式,省得手动配置路径。
三、GCC + CMake 配置步骤
如果你用的是Linux,或者你像我一样喜欢在Windows上用MinGW,那这套方案更适合你。
3.1 安装工具链
Linux用户:
sudo apt update
sudo apt install build-essential cmake libsdl2-dev
Windows用户(MinGW):
- 下载MinGW-w64,或者直接装MSYS2。
- 在MSYS2终端里执行:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-SDL2
3.2 编写CMakeLists.txt
这是CMake的核心配置文件。说白了,它就是告诉编译器:你要用哪些源文件、链接哪些库。
cmake_minimum_required(VERSION 3.10)
project(GameWindow)
# 设置C标准
set(CMAKE_C_STANDARD 11)
# 查找SDL2库
find_package(SDL2 REQUIRED)
# 添加可执行文件
add_executable(GameWindow main.c)
# 链接SDL2
target_link_libraries(GameWindow SDL2::SDL2)
四、第一个游戏窗口
好了,环境搭好了,我们来写真正的代码。目标很简单:弹出一个窗口,背景色是蓝色,然后等用户关掉它。
你想想看,一个游戏窗口需要什么?初始化SDL、创建窗口、创建渲染器、然后进入一个循环不断刷新画面。就这么几步。
#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
// 1. 初始化SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL初始化失败: %s\n", SDL_GetError());
return -1;
}
// 2. 创建窗口
SDL_Window* window = SDL_CreateWindow(
"我的第一个游戏窗口",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
800, 600,
SDL_WINDOW_SHOWN
);
if (!window) {
printf("窗口创建失败: %s\n", SDL_GetError());
SDL_Quit();
return -1;
}
// 3. 创建渲染器
SDL_Renderer* renderer = SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED
);
if (!renderer) {
printf("渲染器创建失败: %s\n", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return -1;
}
// 4. 主循环
int running = 1;
SDL_Event event;
while (running) {
// 处理事件
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
running = 0;
}
}
// 清屏为蓝色
SDL_SetRenderDrawColor(renderer, 0, 100, 200, 255);
SDL_RenderClear(renderer);
// 显示画面
SDL_RenderPresent(renderer);
// 稍微等一下,别让CPU跑满
SDL_Delay(16); // 约60帧
}
// 5. 清理资源
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
五、编译运行
代码写好了,怎么跑起来?
Visual Studio用户: 直接按F5,如果前面配置没问题,你应该能看到一个蓝色窗口弹出来。
CMake用户:
mkdir build
cd build
cmake ..
make
./GameWindow
如果一切顺利,你会看到:
- 一个800x600的窗口出现在屏幕中央
- 窗口标题是「我的第一个游戏窗口」
- 背景是深蓝色
- 点击右上角的X,窗口关闭,程序退出
六、GLFW 方案(备选)
除了SDL2,还有一个常用的库叫GLFW。它比SDL2更轻量,主要专注于窗口和输入处理,图形渲染通常配合OpenGL使用。
如果你以后想做3D游戏,GLFW + OpenGL是经典组合。但2D游戏开发,我个人更推荐SDL2,因为它自带了2D渲染、音频、手柄支持,省得你再找其他库。
引入GLFW的方式和SDL2类似,CMake里这样写:
find_package(glfw3 REQUIRED)
target_link_libraries(GameWindow glfw)
七、常见问题排查
| 问题 | 可能原因 | 解决办法 |
|---|---|---|
| SDL_Init返回-1 | SDL2.dll没找到 | 把SDL2.dll放到exe同目录 |
| 窗口一闪而过 | 主循环没执行 | 检查SDL_PollEvent循环 |
| 链接错误:找不到SDL2.lib | 库路径没配置 | 检查附加库目录设置 |
| CMake找不到SDL2 | 没安装或路径不对 | 用find_package时指定路径 |
嗯,到这里,你的开发环境就搭好了,第一个游戏窗口也跑起来了。别小看这个蓝色窗口,它背后涉及了编译器配置、库管理、事件循环、渲染管线——这些都是游戏开发的基石。
下一章,我们会在这个窗口里画点东西,比如一个会动的小方块。到时候你就知道,游戏开发其实没那么神秘,说白了就是「不断刷新画面,处理用户输入」这两件事的循环。