cmake_minimum_required(VERSION 3.10) project(videogame) set(CMAKE_CXX_COMPILER "clang++") set(CMAKE_CXX_STANDARD 17) file(GLOB_RECURSE SRC_FILES ./src/*.cpp ./src/game/*.cpp ./src/util/config/*.cpp) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(UNIX) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build) else() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) endif() add_executable(app ${SRC_FILES}) find_package(PkgConfig REQUIRED) pkg_check_modules(SDL2 REQUIRED sdl2) pkg_check_modules(FREETYPE REQUIRED freetype2) pkg_check_modules(GLEW REQUIRED glew) find_package(OpenGL REQUIRED) target_compile_options(app PRIVATE -Wall) target_include_directories(app PRIVATE ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR} ) # Platform-specific linking if(WIN32) target_link_libraries(app PRIVATE ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} winmm # For timeGetDevCaps, timeBeginPeriod, timeEndPeriod ) else() target_link_libraries(app PRIVATE ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} ) endif() # release build settings set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wno-nontrivial-memcall") # debug build settings set(CMAKE_CXX_FLAGS_DEBUG "-g -DDEBUG=1 -fsanitize=address -Wno-nontrivial-memcall") add_custom_target(debug COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Building ~~**DEBUG**~~" ) add_custom_target(release COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Building ~~**RELEASE**~~" )