SDL3开发环境搭建
windows
开发包准备
VC
SDL3_image-devel-3.2.0-VC.zip SDL3 image 处理图片
SDL3_ttf-devel-3.2.0-VC.zip SDL3 ttf 加载字体库
mingw
- SDL3-devel-3.2.0-mingw.zip SDL3
- SDL3_image-devel-3.2.0-mingw.zip SDL3 image 处理图片
- SDL3_ttf-devel-3.2.0-mingw.zip SDL3 ttf 加载字体库
cmake 配置
CMakeLists.txt
cmake
cmake_minimum_required(VERSION 3.27)
project(sdl_all)
set(CMAKE_CXX_STANDARD 17)
#MSVC查找库
if (MSVC)
add_compile_options(/utf-8)
find_package(SDL3 CONFIG REQUIRED PATHS "F:/libs/SDL3-devel-3.2.0-VC/SDL3-3.2.0")
find_package(SDL3_ttf CONFIG REQUIRED PATHS "F:/libs/SDL3_ttf-devel-3.2.0-VC/SDL3_ttf-3.2.0")
find_package(SDL3_image CONFIG REQUIRED PATHS "F:/libs/SDL3_image-devel-3.2.0-VC/SDL3_image-3.2.0")
endif ()
#mingw查找库
if (MINGW)
find_package(SDL3 CONFIG REQUIRED PATHS "F:/libs/SDL3-3.2.0")
find_package(SDL3_ttf CONFIG REQUIRED PATHS "F:/libs/SDL3_ttf-3.2.0")
find_package(SDL3_image CONFIG REQUIRED PATHS "F:/libs/SDL3_image-3.2.0")
endif ()
#添加可执行文件
add_executable(sdl_all src/main.cpp)
#链接目标文件
target_link_libraries(sdl_all PRIVATE SDL3::SDL3
SDL3_image::SDL3_image
SDL3_ttf::SDL3_ttf)
#复制DLL
if (WIN32)
add_custom_command(TARGET sdl_all POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:SDL3_ttf::SDL3_ttf>
$<TARGET_FILE_DIR:sdl_all>
COMMENT "COPY SDL3_ttf DLL"
)
add_custom_command(TARGET sdl_all POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:SDL3_image::SDL3_image>
$<TARGET_FILE_DIR:sdl_all>
COMMENT "COPY SDL3_image DLL"
)
add_custom_command(TARGET sdl_all POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:SDL3::SDL3>
$<TARGET_FILE_DIR:sdl_all>
COMMENT "COPY SDL3 DLL"
)
endif ()
main.cpp
cpp
#include <iostream>
#include <SDL3/SDL.h>
#include <SDL3_ttf/SDL_ttf.h>
#include <SDL3_image/SDL_image.h>
int main() {
SDL_Log("%d", SDL_VERSION);
SDL_Log("%d", IMG_Version());
SDL_Log("%d", TTF_Version());
// 初始化SDL
if (!SDL_Init(SDL_INIT_VIDEO)) {
SDL_Log("SDL初始化失败: %s", SDL_GetError());
return -1;
}
// 初始化SDL_ttf
if (!TTF_Init()) {
SDL_Log("SDL_ttf初始化失败: %s", SDL_GetError());
SDL_Quit();
return -1;
}
// 创建窗口和渲染器
auto window = SDL_CreateWindow("SDL3示例", 640, 480, SDL_WINDOW_RESIZABLE);
if (!window) {
SDL_Log("窗口创建失败: %s", SDL_GetError());
TTF_Quit();
SDL_Quit();
return -1;
}
auto renderer = SDL_CreateRenderer(window, nullptr);
if (!renderer) {
SDL_Log("渲染器创建失败: %s", SDL_GetError());
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
return -1;
}
bool quit = false;
while (!quit) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_EVENT_QUIT:
quit = true;
break;
};
}
// 渲染
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Delay(10);
}
// 清理资源
SDL_StopTextInput(window);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
return 0;
}
编译
mingw编译
提前安装mingw
创建目录
bash
mkdir build && cd build
构建
bash
cmake .. -G "MinGW Makefiles"
编译
bash
cmake --build .
运行
bash
./sdl_all.exe
MSVC编译
提前安装VS
创建目录
bash
mkdir build && cd build
构建
bash
cmake ..
编译
bash
cmake --build .
运行
bash
./Debug/sdl_all.exe