CMakeLists.txt betriebssystemunabhängig machen

This commit is contained in:
Anja Freudenreich 2025-10-29 16:35:15 +00:00
parent a1aa30a84c
commit 88e29a1d3e

View File

@ -1,39 +1,69 @@
cmake_minimum_required(VERSION 3.28) cmake_minimum_required(VERSION 3.16)
project(Prog3B) project(Prog3B)
# === Basis-Konfiguration ===
set(EXECUTABLE_NAME Prog3B) set(EXECUTABLE_NAME Prog3B)
set(OS_NAME windows)
# Generate compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Set the default build type if not specified # Default-Build-Type (falls nicht angegeben)
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif() endif()
# === Quell- und Header-Dateien ===
set(SRC_FILES set(SRC_FILES
${CMAKE_CURRENT_LIST_DIR}/main.cpp ${CMAKE_CURRENT_LIST_DIR}/main.cpp
${CMAKE_CURRENT_LIST_DIR}/gamecube.cpp ${CMAKE_CURRENT_LIST_DIR}/gamecube.cpp
) )
set(INCLUDE_DIRS set(INCLUDE_DIRS
${CMAKE_CURRENT_LIST_DIR}/linux ${CMAKE_CURRENT_LIST_DIR}
) )
# === Betriebssystem automatisch erkennen ===
if(WIN32)
set(OS_DIR "windows")
elseif(APPLE)
# Prüfen, ob ARM oder x86
execute_process(
COMMAND uname -m
OUTPUT_VARIABLE ARCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(ARCH STREQUAL "arm64")
set(OS_DIR "mac_arm")
else()
set(OS_DIR "mac_x86")
endif()
elseif(UNIX)
set(OS_DIR "linux")
else()
message(FATAL_ERROR "Unbekanntes Betriebssystem!")
endif()
# === Executable erstellen ===
add_executable(${EXECUTABLE_NAME} ${SRC_FILES}) add_executable(${EXECUTABLE_NAME} ${SRC_FILES})
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${INCLUDE_DIRS}) target_include_directories(${EXECUTABLE_NAME} PRIVATE ${INCLUDE_DIRS})
# === Bibliotheken verlinken ===
target_link_libraries(${EXECUTABLE_NAME} PRIVATE target_link_libraries(${EXECUTABLE_NAME} PRIVATE
${CMAKE_CURRENT_LIST_DIR}/${OS_NAME}/libgamematrix.a ${CMAKE_CURRENT_LIST_DIR}/${OS_DIR}/libgamematrix.a
${CMAKE_CURRENT_LIST_DIR}/${OS_NAME}/libraylib.a ${CMAKE_CURRENT_LIST_DIR}/${OS_DIR}/libraylib.a
) )
if (WIN32)
target_link_libraries(Prog3B PRIVATE winmm) # Windows: zusätzliche Systemlib
if(WIN32)
target_link_libraries(${EXECUTABLE_NAME} PRIVATE winmm)
endif() endif()
# Checks if OSX and links appropriate frameworks (Only required on MacOS) # macOS: Frameworks
if (APPLE) if(APPLE)
target_link_libraries(Prog3B "-framework IOKit") target_link_libraries(${EXECUTABLE_NAME}
target_link_libraries(Prog3B "-framework Cocoa") "-framework IOKit"
target_link_libraries(Prog3B "-framework OpenGL") "-framework Cocoa"
"-framework OpenGL"
)
endif() endif()