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

相关推荐
今晚打老虎21 分钟前
c++之基础A(二维数组)第四课
开发语言·c++
君义_noip35 分钟前
信息学奥赛一本通 1615:【例 1】序列的第 k 个数
c++·算法·信息学奥赛·csp-s
AA陈超43 分钟前
虚幻引擎5 GAS开发俯视角RPG游戏 P07-19.发送鼠标光标数据
c++·笔记·学习·游戏·ue5·虚幻引擎
玖剹1 小时前
哈希表相关题目
数据结构·c++·算法·leetcode·哈希算法·散列表
暗然而日章1 小时前
C++基础:Stanford CS106L学习笔记 14 类型安全 & `std::optional`
c++·笔记·学习
L_09071 小时前
【C++】高阶数据结构 -- 二叉搜索树(BST)
数据结构·c++
大筒木老辈子1 小时前
C++笔记---并发支持库(future)
java·c++·笔记
PyGata2 小时前
CMake学习笔记(二):CMake拷贝文件夹
c++·笔记·学习
仰泳的熊猫2 小时前
1150 Travelling Salesman Problem
数据结构·c++·算法·pat考试
智者知已应修善业2 小时前
【蓝桥杯龟兔赛跑】2024-2-12
c语言·c++·经验分享·笔记·算法·职场和发展·蓝桥杯