VS Code + CMake 调用 SDL2 & SDL2_image 完整编译教程(Windows 平台)

本文基于VS Code 官方 CMake 流程 + Windows 下 SDL2/SDL2_image 实战移植经验,把创建 CMake 项目 → 配置头文件 / 库路径 → 自动复制 DLL → 一键构建运行全流程讲透,新手跟着点就能跑通图形 + 图片加载工程。


一、前置环境准备(必装)

  1. VS Code + 官方扩展

    • C/C++(微软)

    • CMake Tools(微软)

  2. 编译工具

    • MinGW-w64(路径无中文无空格

    • CMake 3.10+(安装时勾选 Add to PATH)

  3. 库文件

提示:编译安装SDL2/SDL2_image库请参照Windows平台下使用cmake构建SDL2和SDL2_image库


二、创建 CMake 项目(用 CMake: Quick Start)

  1. 新建项目文件夹,用 VS Code 打开

  2. 快捷键 Ctrl+Shift+P → 执行 CMake: Quick Start

  3. 步骤:

    • 输入项目名(如 AntGame

    • 语言选 C++

    • 项目类型选 Executable

  4. 自动生成:

    • CMakeLists.txt

    • main.cpp


三、创建 CMakePresets.json(统一构建配置)

  1. Ctrl+Shift+PCMake: Configure

  2. 选择 Add a New PresetCreate from Compilers

  3. 选择你的编译器(MinGW GCC / MSVC)

  4. 命名预设(如 mingw-debug

  5. 生成后文件示例:

json 复制代码
{
    "version": 8,
    "configurePresets": [
        {
            "name": "mingw-debug",
            "displayName": "MinGW GCC Debug",
            "generator": "MinGW Makefiles",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_CXX_COMPILER": "g++"
            }
        }
    ]
}

四、核心配置:CMakeLists.txt 完整模板(直接替换)

这是可直接运行的最终配置,已包含多源文件、头文件路径、库目录、链接、自动拷贝 DLL、资源文件复制。

cmake 复制代码
cmake_minimum_required(VERSION 3.10.0)
project(AntGame VERSION 0.1.0 LANGUAGES C CXX)

# 1. 生成可执行文件(把你的 cpp 全列进来)
add_executable(AntGame
    main.cpp
    ant.cpp
    ground.cpp
    home.cpp
)

# 2. 配置 SDL2 & SDL2_image 路径(改成你自己的解压目录)
set(SDL2_BASE "D:/SDK/SDL2")
set(SDL2_IMAGE_BASE "D:/SDK/SDL2_image")

# 3. 头文件包含路径
target_include_directories(AntGame PRIVATE
    "${SDL2_BASE}/include/SDL2"
    "${SDL2_IMAGE_BASE}/include/SDL2"
)

# 4. 库文件搜索路径
target_link_directories(AntGame PRIVATE
    "${SDL2_BASE}/bin"
    "${SDL2_IMAGE_BASE}/bin"
)

# 5. 链接库
find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2)
target_link_libraries(AntGame PRIVATE
    SDL2::SDL2
    SDL2_image
)

# 6. 自动复制 DLL 到输出目录(关键!解决运行报错)
file(COPY "${SDL2_BASE}/bin/SDL2.dll" DESTINATION "${CMAKE_BINARY_DIR}")
file(COPY "${SDL2_IMAGE_BASE}/bin/SDL2_image.dll" DESTINATION "${CMAKE_BINARY_DIR}")

# 7. 复制图片资源
file(COPY ./ant0.png DESTINATION "${CMAKE_BINARY_DIR}")
file(COPY ./ant1.png DESTINATION "${CMAKE_BINARY_DIR}")

五、VS Code 代码提示配置(可选但推荐)

新建 / 修改 .vscode/c_cpp_properties.json,加入 SDL 头路径:

json 复制代码
{
    "configurations": [
        {
            "includePath": [
                "${workspaceFolder}/**",
                "D:/SDK/SDL2/include/SDL2",
                "D:/SDK/SDL2_image/include/SDL2"
            ],
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

六、main.cpp 测试代码(验证窗口 + 图片)

cpp 复制代码
#define SDL_MAIN_HANDLED //SDL2不要接管main函数
#include <SDL.h>
#include <SDL_image.h>
#include <iostream>

int main() {
    SDL_Init(SDL_INIT_VIDEO);
    IMG_Init(IMG_INIT_PNG);

    SDL_Window* window = SDL_CreateWindow(
        "SDL2+CMake 测试",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        800, 600, SDL_WINDOW_SHOWN
    );
    SDL_Renderer* render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_SetRenderDrawColor(render, 255, 255, 255, 255); //白色
    SDL_Texture* img = IMG_LoadTexture(render, "ant0.png");

    bool running = true;
    SDL_Event e;
    while (running) {
        while (SDL_PollEvent(&e)) {
            if (e.type == SDL_QUIT) running = false;
        }
        SDL_RenderClear(render);
        SDL_RenderCopy(render, img, NULL, NULL);
        SDL_RenderPresent(render);
    }

    SDL_DestroyTexture(img);
    SDL_DestroyRenderer(render);
    SDL_DestroyWindow(window);
    IMG_Quit();
    SDL_Quit();
    return 0;
}

七、一键构建 + 运行(3 步)

  1. 配置

    • Ctrl+Shift+PCMake: Configure

    • 或点底部状态栏齿轮图标

  2. 构建

    • Ctrl+Shift+PCMake: Build

    • 或点底部 Build

  3. 运行 / 调试

    • 点底部 ▶️ 运行

    • 或 F5 调试(需 CMake Tools 接管启动)


八、新手高频报错速查(90% 都能解决)

报错现象 原因 解决方法
找不到 SDL.h 头路径错 核对 target_include_directories
undefined reference 没链接库 检查 target_link_libraries
运行丢 DLL 未复制 file(COPY ...) 自动拷贝
图片加载失败 资源不在 exe 同目录 file(COPY 图片 ...)
CMake 找不到编译器 未选生成器 Configure 时选 MinGW Makefiles

九、总结

用 VS Code + CMake 管理 SDL2 项目,只靠一份 CMakeLists.txt 就能搞定

  • 自动管理多源文件

  • 统一头文件 / 库路径

  • 自动复制 DLL、资源

  • 跨平台、可分享、可调试

比手动改 tasks.json/launch.json 更稳定、更易维护,适合游戏、模拟器、图形工具等中型 C++ 工程。

十、代码下载

C++模拟蚁群(正方形地板)(Windows可直接运行)

十一、参考资料

相关推荐
量子炒饭大师2 小时前
【优化算法】双指针算法的「义体化」重构 ——【双指针】双指针算法中的指针是如何定义的?如何使用它进行一些简单的算法?
c++·算法·重构·优化算法·双指针
小辉同志2 小时前
62. 不同路径
c++·力扣·多维动态规划
Stream_Silver2 小时前
【JNA实战:Java无缝调用Windows API模拟键盘输入】
java·开发语言·windows
arron88992 小时前
DebugView未打印日志原因
c++
颯沓如流星2 小时前
【 Docker Desktop】基于Windows + WSL2 的环境配置, 快速部署一套Kubernetes Cluster
windows·docker·kubernetes
hele_two2 小时前
SDL2高效画实心圆的算法(一)
c++·算法·图形渲染
fred_kang3 小时前
Windows 下 Nginx 启动报错 10013 / OpenEvent 完整排查指南
运维·windows·nginx
AbandonForce4 小时前
哈希表(HashTable,散列表)个人理解
开发语言·数据结构·c++·散列表
样例过了就是过了4 小时前
LeetCode热题100 编辑距离
数据结构·c++·算法·leetcode·动态规划