Skip to content

SDL3开发环境搭建

windows

开发包准备

VC

mingw

cmake 配置

CMakeLists.txt

cmake
cmake_minimum_required(VERSION 3.27)
project(sdl_all)
set(CMAKE_CXX_STANDARD 17)
#MSVC查找库
if (MSVC)
    add_compile_options(/utf-8)
    find_package(SDL3 CONFIG REQUIRED PATHS "F:/libs/SDL3-devel-3.2.0-VC/SDL3-3.2.0")
    find_package(SDL3_ttf CONFIG REQUIRED PATHS "F:/libs/SDL3_ttf-devel-3.2.0-VC/SDL3_ttf-3.2.0")
    find_package(SDL3_image CONFIG REQUIRED PATHS "F:/libs/SDL3_image-devel-3.2.0-VC/SDL3_image-3.2.0")
endif ()
#mingw查找库
if (MINGW)
    find_package(SDL3 CONFIG REQUIRED PATHS "F:/libs/SDL3-3.2.0")
    find_package(SDL3_ttf CONFIG REQUIRED PATHS "F:/libs/SDL3_ttf-3.2.0")
    find_package(SDL3_image CONFIG REQUIRED PATHS "F:/libs/SDL3_image-3.2.0")
endif ()
#添加可执行文件
add_executable(sdl_all src/main.cpp)
#链接目标文件
target_link_libraries(sdl_all PRIVATE SDL3::SDL3
        SDL3_image::SDL3_image
        SDL3_ttf::SDL3_ttf)
#复制DLL
if (WIN32)
    add_custom_command(TARGET sdl_all POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
            $<TARGET_FILE:SDL3_ttf::SDL3_ttf>
            $<TARGET_FILE_DIR:sdl_all>
            COMMENT "COPY SDL3_ttf DLL"
    )
    add_custom_command(TARGET sdl_all POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
            $<TARGET_FILE:SDL3_image::SDL3_image>
            $<TARGET_FILE_DIR:sdl_all>
            COMMENT "COPY SDL3_image DLL"
    )
    add_custom_command(TARGET sdl_all POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy
            $<TARGET_FILE:SDL3::SDL3>
            $<TARGET_FILE_DIR:sdl_all>
            COMMENT "COPY SDL3 DLL"
    )
endif ()

main.cpp

cpp
#include <iostream>
#include <SDL3/SDL.h>
#include <SDL3_ttf/SDL_ttf.h>
#include <SDL3_image/SDL_image.h>

int main() {
    SDL_Log("%d", SDL_VERSION);
    SDL_Log("%d", IMG_Version());
    SDL_Log("%d", TTF_Version());
    // 初始化SDL
    if (!SDL_Init(SDL_INIT_VIDEO)) {
        SDL_Log("SDL初始化失败: %s", SDL_GetError());
        return -1;
    }
    // 初始化SDL_ttf
    if (!TTF_Init()) {
        SDL_Log("SDL_ttf初始化失败: %s", SDL_GetError());
        SDL_Quit();
        return -1;
    }
    // 创建窗口和渲染器
    auto window = SDL_CreateWindow("SDL3示例", 640, 480, SDL_WINDOW_RESIZABLE);
    if (!window) {
        SDL_Log("窗口创建失败: %s", SDL_GetError());
        TTF_Quit();
        SDL_Quit();
        return -1;
    }
    auto renderer = SDL_CreateRenderer(window, nullptr);
    if (!renderer) {
        SDL_Log("渲染器创建失败: %s", SDL_GetError());
        SDL_DestroyWindow(window);
        TTF_Quit();
        SDL_Quit();
        return -1;
    }
    bool quit = false;
    while (!quit) {
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                case SDL_EVENT_QUIT:
                    quit = true;
                    break;
            };
        }
        // 渲染
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
        SDL_Delay(10);
    }
    // 清理资源
    SDL_StopTextInput(window);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    TTF_Quit();
    SDL_Quit();
    return 0;
}

编译

mingw编译

提前安装mingw

创建目录
bash
mkdir build && cd build
构建
bash
cmake .. -G "MinGW Makefiles"
编译
bash
cmake --build .
运行
bash
./sdl_all.exe

MSVC编译

提前安装VS

创建目录
bash
mkdir build && cd build
构建
bash
cmake ..
编译
bash
cmake --build .
运行
bash
./Debug/sdl_all.exe