-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
117 lines (100 loc) · 4.6 KB
/
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
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
cmake_minimum_required(VERSION 3.10)
project(GameOfLife3D)
# Указываем стандарт C++
set(CMAKE_CXX_STANDARD 17)
# Устанавливаем поддержку Unicode
add_definitions(-DUNICODE -D_UNICODE)
# Устанавливаем типы конфигураций
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
# Устанавливаем путь для установки
# set(CMAKE_INSTALL_PREFIX "C:/Program Files/GameOfLife3D" CACHE PATH "Installation Prefix")
# Находим все файлы исходников по категориям
file(GLOB GAME_SOURCES "game/*.cpp" "game/*.h")
file(GLOB RENDERING_SOURCES "rendering/*.cpp" "rendering/*.h")
file(GLOB MATH_SOURCES "mathematics/*.cpp" "mathematics/*.h")
file(GLOB WINDOWING_SOURCES "windowing/*.cpp" "windowing/*.h")
file(GLOB SYSTEM_SOURCES "system/*.cpp" "system/*.h")
file(GLOB RES_SOURCE_DIR "res/*")
# Убедитесь, что не включены файлы из examples
list(FILTER GAME_SOURCES EXCLUDE REGEX ".*examples.*")
list(FILTER RENDERING_SOURCES EXCLUDE REGEX ".*examples.*")
list(FILTER MATH_SOURCES EXCLUDE REGEX ".*examples.*")
list(FILTER WINDOWING_SOURCES EXCLUDE REGEX ".*examples.*")
list(FILTER SYSTEM_SOURCES EXCLUDE REGEX ".*examples.*")
# Добавляем файлы ресурсов
set(RESOURCE_FILES
"res/resource.h"
"res/life.rc"
)
# Явно указываем необходимые файлы ImGui
set(IMGUI_SOURCES
"${PROJECT_SOURCE_DIR}/external/imgui/imgui.cpp"
"${PROJECT_SOURCE_DIR}/external/imgui/imgui.h"
"${PROJECT_SOURCE_DIR}/external/imgui/imgui_draw.cpp"
"${PROJECT_SOURCE_DIR}/external/imgui/imgui_widgets.cpp"
"${PROJECT_SOURCE_DIR}/external/imgui/imgui_tables.cpp"
"${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_win32.cpp"
"${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_win32.h"
"${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3.cpp"
"${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3.h"
)
# Добавляем файлы из папки res
file(GLOB RES_FILES "res/*")
# Указываем директорию для выходных файлов
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# Создаем исполняемый файл
add_executable(${PROJECT_NAME}
${GAME_SOURCES}
${RENDERING_SOURCES}
${MATH_SOURCES}
${WINDOWING_SOURCES}
${SYSTEM_SOURCES}
${RESOURCE_FILES}
${IMGUI_SOURCES}
${RES_FILES}
"main.cpp"
)
set(CMAKE_WINMAIN "wWinMain") # Указываем точку входа
# Устанавливаем, что это приложение Windows
set_target_properties(${PROJECT_NAME} PROPERTIES
WIN32_EXECUTABLE TRUE
)
# Добавляем директории с заголовочными файлами
include_directories(
${PROJECT_SOURCE_DIR}/game
${PROJECT_SOURCE_DIR}/rendering
${PROJECT_SOURCE_DIR}/mathematics
${PROJECT_SOURCE_DIR}/windowing
${PROJECT_SOURCE_DIR}/system
${PROJECT_SOURCE_DIR}/external/imgui
${PROJECT_SOURCE_DIR}/external/imgui/backends
${PROJECT_SOURCE_DIR}/res
)
# Если используете Windows, компиляция ресурсов
if(WIN32)
# Компилируем RC файл
target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/res/life.rc)
endif()
# Группировка файлов в VS по папкам
source_group("Source Files\\game" FILES ${GAME_SOURCES})
source_group("Source Files\\rendering" FILES ${RENDERING_SOURCES})
source_group("Source Files\\mathematics" FILES ${MATH_SOURCES})
source_group("Source Files\\windowing" FILES ${WINDOWING_SOURCES})
source_group("Source Files\\system" FILES ${SYSTEM_SOURCES})
source_group("Source Files\\res" FILES ${RES_SOURCE_DIR})
# Группировка только для нужных файлов ImGui
source_group("external\\imgui" FILES
${PROJECT_SOURCE_DIR}/external/imgui/imgui.cpp
${PROJECT_SOURCE_DIR}/external/imgui/imgui.h
${PROJECT_SOURCE_DIR}/external/imgui/imgui_draw.cpp
${PROJECT_SOURCE_DIR}/external/imgui/imgui_widgets.cpp
${PROJECT_SOURCE_DIR}/external/imgui/imgui_tables.cpp
)
source_group("external\\imgui\\backends" FILES
${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_win32.cpp
${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_win32.h
${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3.cpp
${PROJECT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3.h
)