cmake_minimum_required(VERSION 3.20) project(vibe2_modules) # Establecer el estándar de C++ y habilitar modules set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_SCAN_FOR_MODULES ON) # Opciones comunes de compilación set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Os -ffunction-sections -fdata-sections") # Buscar SDL3 automáticamente find_package(SDL3 REQUIRED) # Si no se encuentra SDL3, generar un error if (NOT SDL3_FOUND) message(FATAL_ERROR "SDL3 no encontrado. Por favor, verifica su instalación.") endif() # Archivos fuente tradicionales file(GLOB SOURCE_FILES source/*.cpp source/external/*.cpp) # Archivos de módulos C++20 file(GLOB MODULE_FILES source/modules/*.cppm source/modules/external/*.cppm) # Comprobar si se encontraron archivos fuente if(NOT SOURCE_FILES) message(FATAL_ERROR "No se encontraron archivos fuente en el directorio 'source/'. Verifica la ruta.") endif() # Detectar la plataforma y configuraciones específicas if(WIN32) set(PLATFORM windows) set(LINK_LIBS ${SDL3_LIBRARIES} mingw32 ws2_32) elseif(UNIX AND NOT APPLE) set(PLATFORM linux) set(LINK_LIBS ${SDL3_LIBRARIES}) elseif(APPLE) set(PLATFORM macos) set(LINK_LIBS ${SDL3_LIBRARIES}) endif() # Incluir directorios de SDL3 include_directories(${SDL3_INCLUDE_DIRS}) # Añadir el ejecutable reutilizando el nombre del proyecto add_executable(${PROJECT_NAME} ${SOURCE_FILES}) # Añadir módulos C++20 si existen if(MODULE_FILES) target_sources(${PROJECT_NAME} PRIVATE FILE_SET CXX_MODULES FILES ${MODULE_FILES} ) endif() # Especificar la ubicación del ejecutable (en la raíz del proyecto) set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}) # Enlazar las bibliotecas necesarias target_link_libraries(${PROJECT_NAME} ${LINK_LIBS})