Select Git revision
UniLogBlueprintFunctionLibrary.h
CMakeLists.txt 5.44 KiB
cmake_minimum_required(VERSION 3.15)
# Projektname und Sprache
project(ADVANCED_WARS
VERSION 1.0.0
DESCRIPTION "HSFD C++ Project"
LANGUAGES CXX
)
include(FetchContent)
# HighFive einbinden
FetchContent_Declare(
highfive
GIT_REPOSITORY https://github.com/highfive-devs/highfive.git
GIT_TAG v2.10.1
)
set(HIGHFIVE_EXAMPLES OFF)
set(HIGHFIVE_UNIT_TESTS OFF)
FetchContent_MakeAvailable(highfive)
# Box2D einbinden
FetchContent_Declare(
box2d
GIT_REPOSITORY https://github.com/erincatto/box2d.git
GIT_TAG v2.4.2
)
set(BOX2D_BUILD_TESTBED OFF CACHE BOOL "" FORCE)
set(BOX2D_BUILD_UNIT_TESTS OFF CACHE BOOL "" FORCE)
set(BOX2D_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(box2d)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.71.0 REQUIRED COMPONENTS graph)
# Quellen sammeln
file(GLOB_RECURSE ADVANCED_WARS_SOURCES
"${PROJECT_SOURCE_DIR}/src/game/*.cpp"
"${PROJECT_SOURCE_DIR}/src/game/*.hpp"
)
# C++ Standard festlegen
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wextra -Wpedantic")
set(CMAKE_C_FLAGS_DEBUG "-g -O0 -Wall -Wextra -Wpedantic")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_definitions(-DDEBUG)
# Compiler-Warnungen aktivieren
if(MSVC)
add_compile_options(/W4)
else()
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# Ressourcen kopieren
set(RES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/res)
set(OUTPUT_RES_DIR ${CMAKE_CURRENT_BINARY_DIR}/res)
file(MAKE_DIRECTORY ${OUTPUT_RES_DIR})
file(GLOB FONT_FILES ${RES_DIR}/*.TTF)
file(GLOB IMAGE_FILES ${RES_DIR}/*.png)
file(GLOB HDF5_FILES ${RES_DIR}/*.h5)
# Executable erstellen
add_executable(advanced_wars ${ADVANCED_WARS_SOURCES})
set(CMAKE_MODULE_PATH ${ADVANCED_WARS_SOURCE_DIR}/cmake/ ${CMAKE_MODULE_PATH})
find_package(Qt6 REQUIRED COMPONENTS Widgets)
# Plattform-spezifische Konfiguration
if(APPLE)
# SDL2 Frameworks für macOS
set(SDL2_PATH "/Library/Frameworks")
set(CMAKE_OSX_ARCHITECTURES "arm64")
target_include_directories(
advanced_wars PRIVATE
${SDL2_PATH}/SDL2.framework/Headers
${SDL2_PATH}/SDL2_image.framework/Headers
${SDL2_PATH}/SDL2_ttf.framework/Headers
)
target_link_libraries(
advanced_wars PRIVATE
${SDL2_PATH}/SDL2.framework/SDL2
${SDL2_PATH}/SDL2_image.framework/SDL2_image
${SDL2_PATH}/SDL2_ttf.framework/SDL2_ttf
Qt6::Core
Boost::graph
box2d
)
# HDF5 für macOS korrekt einbinden
find_package(HDF5 REQUIRED COMPONENTS CXX HL)
target_include_directories(advanced_wars PRIVATE ${HDF5_INCLUDE_DIRS} ${highfive_SOURCE_DIR}/include)
target_link_libraries(advanced_wars PRIVATE ${HDF5_LIBRARIES})
message(STATUS "Include Dir (SDL2): ${SDL2_PATH}/SDL2.framework/Headers")
message(STATUS "Include Dir (SDL2_image): ${SDL2_PATH}/SDL2_image.framework/Headers")
message(STATUS "Include Dir (SDL2_ttf): ${SDL2_PATH}/SDL2_ttf.framework/Headers")
message(STATUS "HDF5 Include Dirs: ${HDF5_INCLUDE_DIRS}")
message(STATUS "HDF5 Libraries: ${HDF5_LIBRARIES}")
message(STATUS "Boost Include Dirs: ${Boost_INCLUDE_DIRS}")
else()
# Linux Konfiguration
find_package(SDL2 REQUIRED)
find_package(SDL2_IMAGE REQUIRED)
find_package(SDL2_ttf REQUIRED)
find_package(HDF5 REQUIRED COMPONENTS CXX HL)
include_directories(/usr/include/SDL2)
include_directories(${SDL2_INCLUDE_DIR})
include_directories(${SDL2_IMG_INCLUDE_DIR})
include_directories(${SDL2_TTF_INCLUDE_DIR})
include_directories(${HDF5_INCLUDE_DIRS})
target_link_libraries(advanced_wars
${HDF5_LIBRARIES}
Qt6::Core
-lSDL2
-lSDL2_image
-lSDL2_ttf
Boost::graph
box2d
m
)
endif()
# leveleditor
# Find Qt
file(GLOB_RECURSE LEVELEDITOR_SOURCES
"${PROJECT_SOURCE_DIR}/src/editor/*.cpp"
"${PROJECT_SOURCE_DIR}/src/editor/*.hpp"
)
# Add executable
add_executable(editor ${LEVELEDITOR_SOURCES})
# Link Qt libraries
target_link_libraries(editor PRIVATE Qt6::Widgets ${HDF5_LIBRARIES})
target_include_directories(editor
PRIVATE
${highfive_SOURCE_DIR}/include
)
# writelevel
add_executable(writelevel ${PROJECT_SOURCE_DIR}/src/util/writelevel.cpp)
target_include_directories(writelevel
PRIVATE
${highfive_SOURCE_DIR}/include
)
target_link_libraries(writelevel
${HDF5_LIBRARIES}
)
target_include_directories(advanced_wars PRIVATE ${highfive_SOURCE_DIR}/include)
# Ressourcen kopieren (plattformübergreifend)
foreach(FONT ${FONT_FILES})
add_custom_command(
TARGET advanced_wars PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${FONT} ${OUTPUT_RES_DIR}
COMMENT "Kopiere Font: ${FONT} nach ${OUTPUT_RES_DIR}"
)
endforeach()
foreach(IMAGE ${IMAGE_FILES})
add_custom_command(
TARGET advanced_wars PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${IMAGE} ${OUTPUT_RES_DIR}
COMMENT "Kopiere Image: ${IMAGE} nach ${OUTPUT_RES_DIR}"
)
endforeach()
foreach(H5_FILE ${HDF5_FILES})
add_custom_command(
TARGET advanced_wars PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${H5_FILE} ${OUTPUT_RES_DIR}
COMMENT "Kopiere HDF5 File: ${H5_FILE} nach ${OUTPUT_RES_DIR}"
)
endforeach()