Instrucciones para una primera prueba de humo. Sistemas testados:
- Linux
- Windows
- MacOS
Todas las rutas relativas a la carpeta raíz del proyecto.
- Instalar Visual Studio community.
- Abrir el fichero
visual_studio/0.\ Windows\ Desktop/P2_Lab.slncon Visual Studio. - Pulsar el boton play de la barra superior (también disponible el script
run.batuna vez compilado el proyecto).
El ejecutable se genera en visual_studio\0. Windows Desktop\Program\P2_Lab.exe.
Se recomiendo usar PowerShell para ejecutarlo y usar la entrada/salida por línea de comandos (std::cin/std::cout).
sudo apt install build-essential cmake libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-gfx-dev libpng-dev libfreetype-dev- make clean; make
bash run.sh
El binario se genera en ./build/p2_project y puede ejecutarse directamente.
sudo dnf install gcc gcc-c++ make cmake libsdl2-devel libsdl2-ttf-devel libsdl2-mixer-devel libsdl2-image-devel libsdl2-gfx-devel libpng-devel libfreetype-devel- make clean; make
bash run.sh
El binario se genera en ./build/p2_project y puede ejecutarse directamente.
Esta guía explica cómo configurar el proyecto para que compile en macOS usando Homebrew y SDL2 (y extensiones) con CMake o, opcionalmente, con un Makefile simple.
En macOS (Apple Silicon o Intel) instala las dependencias con:
brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer libpng pkg-configComprobaciones rápidas (opcionales):
ls /opt/homebrew/include/SDL2 # headers de SDL2
ls /opt/homebrew/lib | grep SDL2 # libs de SDL2 y extensionesEn Intel es posible que Homebrew use /usr/local en lugar de /opt/homebrew. Ajusta las rutas si es tu caso.
Un CMakeLists.txt mínimo compatible con macOS/Homebrew podría tener esta estructura:
cmake_minimum_required(VERSION 3.10)
project(p2_project)
set(CMAKE_CXX_STANDARD 20)
add_executable(p2_project)
# Compilación con warnings y debug
target_compile_options(p2_project PRIVATE -Wextra -g3 -O0)
# Directorios de include del proyecto
include_directories("src/")
include_directories("src/private/sdl_wrapper")
include_directories("src/private/extlibs")
include_directories("test/")
# Headers de Homebrew (SDL2, SDL2_image, SDL2_ttf, libpng...)
include_directories(/opt/homebrew/include)
# Fuentes del proyecto
file(GLOB_RECURSE files
"src/*.cpp"
"test/*.cpp"
)
target_sources(p2_project PRIVATE ${files})
# SDL2 core (usa el config de CMake/Homebrew)
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
# Directorios de librerías de Homebrew (dylibs en /opt/homebrew/lib)
target_link_directories(p2_project PRIVATE /opt/homebrew/lib)
# Enlazar contra SDL2 + extensiones + png
target_link_libraries(p2_project PRIVATE
${SDL2_LIBRARIES}
SDL2_image
SDL2_ttf
SDL2_mixer
SDL2main
png
png16
)Puntos clave:
- Headers en macOS (Homebrew):
#include <SDL2/SDL.h>#include <SDL2/SDL_image.h>#include <SDL2/SDL_ttf.h>
- Librerías en
/opt/homebrew/lib:libSDL2.dylib,libSDL2_image.dylib,libSDL2_ttf.dylib,libSDL2_mixer.dylib, etc.
find_package(SDL2 REQUIRED)proporciona:SDL2_INCLUDE_DIRSSDL2_LIBRARIES
target_link_directories(p2_project PRIVATE /opt/homebrew/lib)indica al linker dónde buscar-lSDL2_image,-lSDL2_ttf, etc.
Si tu brew --prefix no es /opt/homebrew, sustituye esa ruta por la que devuelva:
brew --prefixPara que el mismo código funcione en Windows, Linux y macOS, es útil usar directivas de preprocesador:
#if defined(__APPLE__)
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#else
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#endifAsí:
- En macOS/Homebrew se usarán
<SDL2/...>. - En otros sistemas donde SDL se instala como
<SDL.h>funciona sin cambios.
Haz lo mismo en cualquier fichero que incluya SDL (por ejemplo keyboard.h, sprites.h, video.cpp, graphics.cpp, etc.).
Si quieres compilar sin CMake, puedes usar un Makefile apoyado en pkg-config:
CXX = g++
CXXFLAGS = -std=c++20 -Wall -Wextra -g
# Flags de SDL2, SDL2_image y SDL2_ttf obtenidos con pkg-config
CXXFLAGS += $(shell pkg-config --cflags sdl2 SDL2_image SDL2_ttf)
LDFLAGS = $(shell pkg-config --libs sdl2 SDL2_image SDL2_ttf) -lpng
SRC = $(wildcard src/*.cpp src/private/sdl_wrapper/*.cpp src/private/sdl_wrapper/NFont/*.cpp test/*.cpp)
OBJ = $(SRC:.cpp=.o)
p2_project: $(OBJ)
$(CXX) $(OBJ) -o $@ $(LDFLAGS)
clean:
rm -f $(OBJ) p2_projectRequisitos previos:
brew install pkg-configpkg-config se encarga de devolver los flags adecuados (-I y -L -l...) en función de dónde Homebrew haya instalado las librerías.
- Instala con Homebrew:
sdl2,sdl2_image,sdl2_ttf,sdl2_mixer,libpng,pkg-config. - Includes:
- macOS:
<SDL2/...>y<png.h>(vía/opt/homebrew/include).
- macOS:
- CMake:
include_directories(/opt/homebrew/include)target_link_directories(p2_project PRIVATE /opt/homebrew/lib)target_link_libraries(... SDL2_image SDL2_ttf SDL2_mixer SDL2main png png16)
- Código:
- Usa
#if defined(__APPLE__)para seleccionar<SDL2/...>en macOS y<SDL.h>en el resto.
- Usa
Con esto el proyecto queda preparado para compilar y ejecutarse correctamente en macOS usando la instalación estándar de SDL2 con Homebrew.