1- cmake_minimum_required (VERSION 3.8 )
1+ cmake_minimum_required (VERSION 3.21 )
22
33project (SuperMario VERSION 0.99 LANGUAGES C CXX )
44
55set (CMAKE_CXX_STANDARD 20)
66set (CMAKE_CXX_STANDARD_REQUIRED ON )
7+ set (CMAKE_CXX_EXTENSIONS OFF )
78
8- if ( NOT CMAKE_BUILD_TYPE )
9- set (CMAKE_BUILD_TYPE " Release" )
9+ if ( NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE )
10+ set (CMAKE_BUILD_TYPE Release)
1011endif ()
1112
12- # BUILD EXTERNAL LIBRARIES
13- include (${CMAKE_ROOT} /Modules/ExternalProject.cmake )
14- ExternalProject_Add (SFML
15- #GIT_REPOSITORY https://github.com/SFML/SFML.git GIT_TAG 2.5.1
16- SOURCE_DIR ${CMAKE_SOURCE_DIR} /ext/SFML
17- CMAKE_ARGS
18- -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR >
19- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} )
20- ExternalProject_Get_Property (SFML INSTALL_DIR )
21- set (SFML_LIB ${INSTALL_DIR} )
22-
23- ExternalProject_Add (TinyXml2
24- #GIT_REPOSITORY https://github.com/leethomason/tinyxml2.git
25- SOURCE_DIR ${CMAKE_SOURCE_DIR} /ext/tinyxml2
26- CMAKE_ARGS
27- -DBUILD_TESTS=OFF
28- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
29- -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR >)
30- ExternalProject_Get_Property (TinyXml2 INSTALL_DIR )
31- set (TINY_XML_LIB ${INSTALL_DIR} )
32-
33- link_directories (${SFML_LIB} /lib ${TINY_XML_LIB} /lib )
13+ list (PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
14+
3415
3516set (MARIO_SOURCE_DIR ${CMAKE_SOURCE_DIR} /source)
3617
18+
19+ add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /source/game_framework )
20+
3721set (SOURCE
38- ${MARIO_SOURCE_DIR} /game_framework/Collisions.cpp
39- ${MARIO_SOURCE_DIR} /game_framework/InputManager.cpp
40- ${MARIO_SOURCE_DIR} /game_framework/TimerManager.cpp
41- ${MARIO_SOURCE_DIR} /game_framework/GameObject.cpp
42- ${MARIO_SOURCE_DIR} /game_framework/Property.cpp
43- ${MARIO_SOURCE_DIR} /game_framework/StateMachine.cpp
44- ${MARIO_SOURCE_DIR} /game_framework/Logger.cpp
45- ${MARIO_SOURCE_DIR} /game_framework/Rect.cpp
46- ${MARIO_SOURCE_DIR} /game_framework/Vector.cpp
47- ${MARIO_SOURCE_DIR} /utils/Format.cpp
4822 ${MARIO_SOURCE_DIR} /Blocks.cpp
4923 ${MARIO_SOURCE_DIR} /GameEngine.cpp
5024 ${MARIO_SOURCE_DIR} /Items.cpp
@@ -71,18 +45,6 @@ set(SOURCE
7145)
7246
7347set (HEADERS
74- ${MARIO_SOURCE_DIR} /game_framework/Collisions.hpp
75- ${MARIO_SOURCE_DIR} /game_framework/InputManager.hpp
76- ${MARIO_SOURCE_DIR} /game_framework/TimerManager.hpp
77- ${MARIO_SOURCE_DIR} /game_framework/GameObject.hpp
78- ${MARIO_SOURCE_DIR} /game_framework/Logger.hpp
79- ${MARIO_SOURCE_DIR} /game_framework/Property.hpp
80- ${MARIO_SOURCE_DIR} /game_framework/Rect.hpp
81- ${MARIO_SOURCE_DIR} /game_framework/StateMachine.hpp
82- ${MARIO_SOURCE_DIR} /game_framework/ResourceManager.hpp
83- ${MARIO_SOURCE_DIR} /game_framework/Vector.hpp
84- ${MARIO_SOURCE_DIR} /utils/Format.hpp
85- ${MARIO_SOURCE_DIR} /utils/RTIIX.hpp
8648 ${MARIO_SOURCE_DIR} /Character.hpp
8749 ${MARIO_SOURCE_DIR} /TileMap.hpp
8850 ${MARIO_SOURCE_DIR} /Blocks.hpp
@@ -112,7 +74,13 @@ set(HEADERS
11274)
11375
11476# Target
115- add_executable (SuperMario ${SOURCE} ${HEADERS} )
77+ add_executable (SuperMario )
78+
79+ target_sources (SuperMario
80+ PRIVATE
81+ ${SOURCE}
82+ ${HEADERS}
83+ )
11684
11785# Include directories
11886target_include_directories (SuperMario
@@ -121,10 +89,6 @@ target_include_directories(SuperMario
12189 ${MARIO_SOURCE_DIR} /enemies
12290 ${MARIO_SOURCE_DIR} /game_framework
12391 ${MARIO_SOURCE_DIR} /pickups
124- ${MARIO_SOURCE_DIR} /utils
125- ${CMAKE_SOURCE_DIR} /include
126- ${SFML_LIB} /include
127- ${TINY_XML_LIB} /include
12892)
12993
13094if (MSVC )
@@ -133,43 +97,21 @@ if (MSVC)
13397 set_target_properties ( SuperMario PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR} /Build" )
13498 set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup" )
13599
136- file (GLOB_RECURSE GAME_FILES CONFIGURE_DEPENDS
137- "${CMAKE_SOURCE_DIR} /source/*.cpp"
138- "${CMAKE_SOURCE_DIR} /source/*.c"
139- "${CMAKE_SOURCE_DIR} /source/*.hpp"
140- "${CMAKE_SOURCE_DIR} /source/*.h"
141- )
142-
143- source_group (TREE "${CMAKE_SOURCE_DIR} /source" FILES ${GAME_FILES} )
144-
100+ source_group (TREE "${MARIO_SOURCE_DIR} " FILES ${SOURCE} ${HEADERS} )
145101
146102endif (MSVC )
147103
148- # ADD DEPENDISIES FOR EXECUTABLE
149- add_dependencies (SuperMario SFML TinyXml2 )
150-
151- #find_library(MYLIB1 NAMES mylibrary1 PATHS /path/to/libraries REQUIRED)
152-
153104target_link_libraries (SuperMario
154- optimized sfml-system debug sfml-system-d
155- optimized sfml-window debug sfml-window-d
156- optimized sfml-graphics debug sfml-graphics-d
157- optimized sfml-audio debug sfml-audio-d
158- optimized tinyxml2 debug tinyxml2d
105+ PRIVATE
106+ game-framework
159107)
160108
161109if (UNIX AND NOT APPLE )
162110 target_link_libraries (SuperMario stdc++ m pthread )
163111endif ()
164112
165- # POST BUILD SCRIPTS
166- set (POST_LIB_DIR "lib" )
167- if (WIN32 )
168- set (POST_LIB_DIR "bin" )
169- endif ()
170-
171- ADD_CUSTOM_COMMAND (TARGET SuperMario POST_BUILD
172- COMMAND ${CMAKE_COMMAND} -E copy_directory "${SFML_LIB} /${POST_LIB_DIR} " "${CMAKE_CURRENT_BINARY_DIR} "
173- COMMAND ${CMAKE_COMMAND} -E copy_directory "${TINY_XML_LIB} /${POST_LIB_DIR} " "${CMAKE_CURRENT_BINARY_DIR} "
174- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR} /res" "${CMAKE_CURRENT_BINARY_DIR} /res" )
175-
113+ add_custom_command (TARGET SuperMario POST_BUILD
114+ COMMAND "${CMAKE_COMMAND} " -E copy_directory
115+ "${CMAKE_SOURCE_DIR} /res"
116+ "$<TARGET_FILE_DIR :SuperMario >/res"
117+ )
0 commit comments