文章目录
- [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 下载
点击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
