-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
100 lines (86 loc) · 3.02 KB
/
CMakeLists.txt
File metadata and controls
100 lines (86 loc) · 3.02 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
cmake_minimum_required(VERSION 3.16)
# 指定编译器路径
set(CMAKE_C_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.44.35207/bin/Hostx86/x86/cl.exe")
set(CMAKE_CXX_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.44.35207/bin/Hostx86/x86/cl.exe")
# 支持 vcpkg
set(CMAKE_TOOLCHAIN_FILE "E:/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
project(cppcraft VERSION 0.1.0 LANGUAGES CXX)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 针对MSVC编译器的特殊配置
if(MSVC)
# 确保使用正确的标准库
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
# 禁止警告C4819(代码页问题)
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
add_compile_options(/wd4819)
endif()
# 构建类型配置
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
endif()
# 查找依赖
find_package(glfw3 3.3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
# 包含头文件目录
include_directories(
${PROJECT_SOURCE_DIR}/include
${OPENGL_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS}
)
# 针对MSVC编译器,手动添加标准库include路径
if(MSVC)
# 直接设置MSVC标准库include路径
set(MSVC_INCLUDE_DIR "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.44.35207/include")
if(EXISTS ${MSVC_INCLUDE_DIR})
include_directories(
${MSVC_INCLUDE_DIR}
)
endif()
# 添加Windows SDK include路径(根据实际安装情况调整)
set(WINDOWS_SDK_VERSIONS "10.0.26100.0" "10.0.22621.0" "10.0.20348.0" "10.0.19041.0" "10.0.18362.0")
foreach(SDK_VER ${WINDOWS_SDK_VERSIONS})
set(SDK_DIR "C:/Program Files (x86)/Windows Kits/10/Include/${SDK_VER}")
if(EXISTS ${SDK_DIR})
include_directories(
"${SDK_DIR}/ucrt"
"${SDK_DIR}/shared"
"${SDK_DIR}/um"
)
break()
endif()
endforeach()
endif()
# 收集源文件
set(SOURCES
${PROJECT_SOURCE_DIR}/src/main.cpp
${PROJECT_SOURCE_DIR}/src/platform/Time.cpp
${PROJECT_SOURCE_DIR}/src/platform/Input.cpp
${PROJECT_SOURCE_DIR}/src/platform/Window.cpp
${PROJECT_SOURCE_DIR}/src/renderer/Buffer.cpp
${PROJECT_SOURCE_DIR}/src/renderer/Camera.cpp
${PROJECT_SOURCE_DIR}/src/renderer/Shader.cpp
${PROJECT_SOURCE_DIR}/src/renderer/Texture.cpp
${PROJECT_SOURCE_DIR}/src/mesher/Mesh.cpp
${PROJECT_SOURCE_DIR}/src/mesher/Mesher.cpp
${PROJECT_SOURCE_DIR}/src/world/Chunk.cpp
${PROJECT_SOURCE_DIR}/src/world/ChunkManager.cpp
)
# 创建可执行文件
add_executable(cppcraft ${SOURCES})
# 链接库
target_link_libraries(cppcraft
glfw
${OPENGL_LIBRARIES}
${GLEW_LIBRARIES}
)
# 复制资源文件
add_custom_command(
TARGET cppcraft POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/assets
$<TARGET_FILE_DIR:cppcraft>/assets
)