From 71f5d90efae84e85afa7b1905c91c02796a33cce Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 24 Mar 2025 12:17:19 +0100 Subject: [PATCH] aaara si, makes, cmakes i gitignores com toca --- .gitignore | 1 + CMakeLists.txt | 58 +++++++++++++++++++++++++++++--------------------- Makefile | 42 +++++++++++++----------------------- 3 files changed, 50 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index 08664fa..a9e6fe0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +demo3_pixels_bouncing build/ # ---> C++ diff --git a/CMakeLists.txt b/CMakeLists.txt index de7ff74..66ce869 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,35 +5,45 @@ project(demo3_pixels_bouncing) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Buscar todos los archivos `.cpp` en la carpeta `source` -file(GLOB SOURCE_FILES source/*.cpp) - -# Definir el ejecutable -set(EXECUTABLE demo3_pixels_bouncing) +# 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) -# Detectar la plataforma y ajustar configuraciones específicas -if(WIN32) - set(PLATFORM windows) - set(EXE_EXT ".exe") - set(EXTRA_LIBS mingw32 ws2_32) -elseif(UNIX AND NOT APPLE) - set(PLATFORM linux) - set(EXE_EXT ".out") - set(EXTRA_LIBS "") -elseif(APPLE) - set(PLATFORM macos) - set(EXE_EXT ".out") - set(EXTRA_LIBS "") +# 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() -# Añadir el ejecutable con todos los archivos fuente -add_executable(${EXECUTABLE}${EXE_EXT} ${SOURCE_FILES}) +# Archivos fuente +file(GLOB SOURCE_FILES source/*.cpp) -# Enlazar las bibliotecas específicas y SDL3 -target_link_libraries(${EXECUTABLE}${EXE_EXT} ${EXTRA_LIBS} SDL3::SDL3) +# 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() -# Colocar el ejecutable en la raíz del proyecto -set_target_properties(${EXECUTABLE}${EXE_EXT} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}) +# 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}) + +# 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}) diff --git a/Makefile b/Makefile index a234a84..c435160 100644 --- a/Makefile +++ b/Makefile @@ -1,34 +1,22 @@ -# Makefile sin espacios adicionales y con sintaxis minimalista -CXXFLAGS := -std=c++20 -Wall -Os -ffunction-sections -fdata-sections -LDFLAGS := -lSDL3 -SOURCE := source/*.cpp -EXECUTABLE := demo3_pixels_bouncing -RM := rm -f +# Variables comunes +SOURCE := source/*.cpp +EXECUTABLE_NAME := demo3_pixels_bouncing +CXXFLAGS := -std=c++20 -Wall -Os -ffunction-sections -fdata-sections # Opciones comunes de compilación +LDFLAGS := -lSDL3 # Flags de enlace comunes +OUTPUT_EXT := -# Detectar plataforma +# Detectar plataforma y configurar ifeq ($(OS),Windows_NT) - PLATFORM := windows - LDFLAGS += -lmingw32 -lws2_32 - EXE_EXT := .exe + LDFLAGS += -lmingw32 -lws2_32 + OUTPUT_EXT := .exe else - UNAME_S:=$(shell uname -s) -ifeq ($(UNAME_S),Linux) - PLATFORM := linux - EXE_EXT := .out -endif -ifeq ($(UNAME_S),Darwin) - PLATFORM := macos - EXE_EXT := .out -endif + OUTPUT_EXT := .out endif -# Regla principal -all: $(EXECUTABLE) +# Regla principal: compilar el ejecutable +all: + $(CXX) $(SOURCE) $(CXXFLAGS) $(LDFLAGS) -o $(EXECUTABLE_NAME)$(OUTPUT_EXT) -# Compilar -$(EXECUTABLE): - $(CXX) $(SOURCE) $(CXXFLAGS) $(LDFLAGS) -o $(EXECUTABLE)$(EXE_EXT) - -# Limpiar +# Regla para limpiar archivos generados clean: - $(RM) $(EXECUTABLE)* \ No newline at end of file + rm -f $(EXECUTABLE_NAME)$(OUTPUT_EXT) \ No newline at end of file