Nimbin2git.christianimmanuel.de / SDL & Graphics / SDL_Game_CPP / CMakeLists.txt

SDL_Game_CPP git · main

git clone https://git.christianimmanuel.de/sdl-graphics/SDL_Game_CPP.gitwget https://git.christianimmanuel.de/sdl-graphics/SDL_Game_CPP/archive/SDL_Game_CPP.tar.gz
CMakeLists.txt 2 KB · 76 lines raw
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"
)