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

相关推荐
C++ 老炮儿的技术栈1 小时前
用密码学安全随机数生成256位密钥
c语言·开发语言·c++·windows·安全·密码学·visual studio
nianniannnn2 小时前
Eigen 矩阵操作笔记
c++·笔记·线性代数·矩阵
adfass2 小时前
桌面挂件时钟/多功能时钟C++
开发语言·c++·算法
全栈视界师2 小时前
《机器人实践开发②:Foxglove 嵌入式移植 + CMake 集成》
c++·机器人·数据可视化
繁华似锦respect2 小时前
Linux-内核核心组成部分
linux·c++
不知所云,3 小时前
2.windows c/c++ 编译器安装, mingw和clang
c语言·c++·windows·mingw·clang·c编译器
爪哇部落算法小助手3 小时前
爪哇周赛 Round 3
数据结构·c++·算法
十五年专注C++开发3 小时前
Mimalloc:一款高性能、低开销和线程安全的C++内存分配器
c++·内存分配·mimalloc
纵有疾風起3 小时前
【C++—STL】红黑树底层封装与set/map模拟实现
开发语言·c++·经验分享·面试·开源·stl