5. SDL3 库项目引入

文章目录

  • [1. SDL3 下载](#1. SDL3 下载)
  • [2. sdl3 编译](#2. sdl3 编译)
  • [3. 静态库使用](#3. 静态库使用)
    • [3.1 库文件引入](#3.1 库文件引入)
    • [3.2 修改Cmakelist.txt配置](#3.2 修改Cmakelist.txt配置)
    • [3.3 编写测试代码](#3.3 编写测试代码)
  • [4. 测试结果](#4. 测试结果)
  • [5. 代码](#5. 代码)

1. SDL3 下载

官网: https://www.libsdl.org/

点击SDL Releases 或者 SDL GItHub 进入github下载:

因为自己在windows下使用的mingw,所以下载mingw版的,也可以 下载源码自己编译。

这里选择下载源码自己编译,因为编译好的是提供的动态库,但是在编写应用时不想带一个动态库,所以需要自己手动编译出静态库。

2. sdl3 编译

  • 选择源码目录和编译输出目录:

  • 选择生成类型

    出现如下报错时

    复制bin/libwinpthread-1.dll 到 libexec\gcc\x86_64-w64-mingw32\15.2.0\libwinpthread-1.dll后清空build目录重新生成:

  • 配置选项
    等待配置完成后

    选择配置:
    SDL_STATIC

    然后点击生成:

  • 编译
    生成完成后在build目录下打开中打开终端,编译代码:

    mingw32-make -j8

编译完成:

在build目录下生成对应的动态库和静态库:

3. 静态库使用

动态库使用请参考:https://blog.csdn.net/qq_51355375/article/details/147051709?spm=1011.2415.3001.5331

3.1 库文件引入

在项目根目录下,新建文件夹:

复制代码
third_party
	SDL-3.2.26
		include
			SDL3
		lib

将之前编译的静态库文件复制到lib目录下,将头文件复制到include\SDL3目录下, 这里要注意,为保持sdl原来的引用关系,需要将头文件放在三方库sdl目录下的include\SDL3下。

上述复制到third_party\SDL-3.2.26对应的目录下:

3.2 修改Cmakelist.txt配置

上述在项目中引入了sdl3编译好的静态库和头文件, 现在在配置文件中引入相关依赖。

复制代码
cmake_minimum_required(VERSION 4.2.0)
project(vulkan_app LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS ON)

set(TARGET vulkan_app)

# 生成 compile_command.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)


############## 三方库配置 #############################################
include_directories(${CMAKE_SOURCE_DIR}/third_party/SDL-3.2.26/include)

############### 项目配置 ##############################################
# 头文件
include_directories(${CMAKE_SOURCE_DIR}/include)

# 源文件
file(GLOB SRC_FILES
    ${CMAKE_SOURCE_DIR}/src/*.cpp
)

# 库检索
link_directories(${CMAKE_SOURCE_DIR}/third_party/SDL-3.2.26/lib)

# 创建主程序
add_executable(${TARGET} src/main.cpp)

# 链接库
target_link_libraries(${TARGET}
    SDL3
)

# 链接 Windows 系统库
if (WIN32)
    target_link_libraries(${TARGET}
        winmm
        setupapi
        imm32
        version
    )
endif()

3.3 编写测试代码

在src/main.cpp中:

复制代码
#include "SDL3/SDL.h"

int main(int argc, char* argv[]) {
    // 初始化SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        SDL_Log(" SDL init falid : %s", SDL_GetError());
        return -1;
    }

    // 创建窗口
    SDL_Window* window = SDL_CreateWindow("SDL3", 640, 480, SDL_WINDOW_OPENGL);
    if (!window) {
        SDL_Log("create window fail: %s", SDL_GetError());
        SDL_Quit();
        return -1;
    }

    // 主循环
    bool running = true;
    while (running) {
        SDL_Event event;
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_EVENT_QUIT) {
                running = false;
            }
        }
    }

    // 释放资源
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

4. 测试结果

5. 代码

https://gitcode.com/CodingBinary/vulkan-st-log/tree/main/02cpp_sdl

相关推荐
学逆向的5 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao5 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
小徐不徐说6 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的6 小时前
C++第一节课
开发语言·c++
UIU1147 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
TMedical7 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
qq_406981038 小时前
共享变量一 关于extern与const
开发语言·c++
chari克里10 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt
码匠许师傅11 小时前
【C++三方组件】mbedTLS:面向嵌入式的轻量 TLS
开发语言·c++
?re?ta?rd?ed?11 小时前
C++11新特性,{}与左值
c++·windows