raylib新建窗口

main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "raylib.h"

int main(void)
{
// 1. 创建窗口(宽度、高度、标题)
InitWindow(800, 450, "raylib window example");

// 2. 设置目标帧率(固定刷新节奏)
SetTargetFPS(60);

// 3. 主循环:窗口未关闭时持续运行
while (!WindowShouldClose())
{
// --- 更新逻辑(Update) ---
// 处理输入、更新状态等

// --- 绘制阶段(Draw) ---
BeginDrawing();

ClearBackground(RAYWHITE); // 清屏
DrawText("Hello, raylib!", 190, 200, 20, LIGHTGRAY);

EndDrawing(); // 结束绘制
}

// 4. 关闭窗口并释放资源
CloseWindow();

return 0;
}

项目构建与管理

使用cmakelists.txt构建,Cmakepreset.sjon配置编译信息,vcpkg.json管理rylib库。debug链接动态库,release链接静态库,使用Ninja与msvc的cl编译器。

项目结构

1
2
3
4
5
6
7
8
9
10
11
│  build_debug.bat
│ build_realse.bat
│ CMakeLists.txt
│ CMakePresets.json
│ vcpkg.json

├─bin
├─out
│ └─build
└─src
main.c

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
cmake_minimum_required(VERSION 3.21)
project(rayuse VERSION 1.0.0 LANGUAGES CXX C)
# 输出到项目下的 bin 文件夹
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

find_package(raylib CONFIG REQUIRED)

set(SOURCE src/main.c)
add_executable(${PROJECT_NAME} ${SOURCE})

target_link_libraries(rayuse PRIVATE
raylib
opengl32
gdi32
winmm
shell32
user32
)

#target_include_directories(rayuse PRIVATE "include")

if(MSVC)
# Release 模式下隐藏黑窗口
if(CMAKE_BUILD_TYPE STREQUAL "Release")
target_link_options(${PROJECT_NAME} PRIVATE "/SUBSYSTEM:WINDOWS" "/ENTRY:mainCRTStartup")
endif()
elseif(MINGW)
target_link_options(${PROJECT_NAME} PRIVATE "-mwindows")
endif()

CMakePresets.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
{
"version": 3,

"configurePresets": [
{
"name": "base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES"
}
},
{
"name": "msvc-base-x64",
"displayName": "msvc-base (x64)",
"hidden": true,
"inherits": "base",
"architecture": {
"value": "x64",
"strategy": "external"
},
"toolset": {
"value": "host=x64",
"strategy": "external"
},
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"vendor": {
"jetbrains.com/clion": {
"toolchain": "MSVC"
}
}
},

{
"name": "x64_debug",
"inherits": "msvc-base-x64",
"cacheVariables": {
"VCPKG_TARGET_TRIPLET": "x64-windows",
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDebugDLL"

}
},
{
"name": "x64_release",
"inherits": "msvc-base-x64",
"cacheVariables": {
"VCPKG_TARGET_TRIPLET": "x64-windows-static",
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded"
}
}
],
"buildPresets": [
{
"name": "debug",
"configurePreset": "x64_debug"
},
{
"name": "release",
"configurePreset": "x64_release"
}
]
}

vcpkg.json

1
2
3
4
5
6
7
8
9
10
11
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "rayuse",
"version": "1.0.0",
"builtin-baseline": "e5a1490e1409d175932ef6014519e9ae149ddb7c",
"description": "A modular, testable Snake game with raylib",
"dependencies": [
"raylib"
]
}

构建脚本

  1. build_debug.bat
1
2
3
4
5
6
7
8
@echo off

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

cmake --preset=x64_debug

cmake --build --preset=debug
pause
  1. build_realse.bat
1
2
3
4
5
6
7
8
@echo off

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

cmake --preset=x64_release

cmake --build --preset=release
pause