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

相关推荐
郝学胜-神的一滴23 分钟前
[简化版 GAMES 101] 计算机图形学 04:二维变换上
c++·算法·unity·godot·图形渲染·unreal engine·cesium
来日可期131425 分钟前
C/C++ 反常识记录(1)—— 那些容易踩坑的语法细节
c语言·开发语言·c++
计算机安禾28 分钟前
【数据结构与算法】第41篇:图论(五):拓扑排序与关键路径
c语言·数据结构·c++·算法·图论·visual studio
Q741_14731 分钟前
每日一题 力扣 1320. 二指输入的的最小距离 动态规划 C++ 题解
c++·算法·leetcode·动态规划
实心儿儿32 分钟前
C++ —— C++11(2)
开发语言·c++
加油JIAX33 分钟前
C++11特性
c++
yong15858553431 小时前
Linux C++ 中的 volatile变量在多线程环境下进行运算的问题
c语言·c++
小肝一下1 小时前
c++从入门到跑路——string类
开发语言·c++·职场和发展·string类
楼田莉子2 小时前
设计模式:构造器模式
开发语言·c++·后端·学习·设计模式
邪修king2 小时前
UE5 零基础入门第二弹:让你的几何体 “活” 起来 ——Actor 基础与蓝图交互入门
c++·ue5·交互