cmake_minimum_required(VERSION 3.10) project(map_editor LANGUAGES CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(ENABLE_OPTIMIZATION "" CACHE STRING "Build mode: empty, NOOPT, DEBUG, or OPTIMIZED") file(GLOB_RECURSE SRC_FILES ${CMAKE_SOURCE_DIR}/src/*.cpp ) add_executable(map_editor main.cpp ${SRC_FILES} ) target_include_directories(map_editor PRIVATE ${CMAKE_SOURCE_DIR}/src ) target_link_libraries(map_editor PRIVATE SDL3 SDL3_ttf SDL3_image SDL3_mixer ) target_compile_options(map_editor PRIVATE -Wall -Wextra) if(ENABLE_OPTIMIZATION STREQUAL "NOOPT") target_compile_options(map_editor PRIVATE -fsanitize=address -fno-omit-frame-pointer -g -O0) target_link_options(map_editor PRIVATE -fsanitize=address) target_compile_definitions(map_editor PRIVATE) elseif(ENABLE_OPTIMIZATION STREQUAL "DEBUG") set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE) target_compile_options(map_editor PRIVATE -fsanitize=address -fno-omit-frame-pointer -g -O0) target_link_options(map_editor PRIVATE -fsanitize=address) target_compile_definitions(map_editor PRIVATE DEBUG_BUILD) elseif(ENABLE_OPTIMIZATION STREQUAL "OPTIMIZED") set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) target_compile_options(map_editor PRIVATE -O3 -march=native -mtune=native -flto -fomit-frame-pointer ) target_link_options(map_editor PRIVATE -flto ) target_compile_definitions(map_editor PRIVATE NDEBUG) endif() # At the end of your CMakeLists.txt add_custom_target(clean-all COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles ${CMAKE_CURRENT_BINARY_DIR}/Makefile ${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake ${CMAKE_CURRENT_BINARY_DIR}/map_editor ${CMAKE_CURRENT_BINARY_DIR}/map_editor.exe # Windows COMMENT "Cleaning all build artifacts" )