# Minimum required version of CMake cmake_minimum_required(VERSION 3.10) # Project setup project(main VERSION 1.0.0 HOMEPAGE_URL "https://git.noorlander.info/E.Noorlander/CMake_SDL_CPP.git" DESCRIPTION "Demo embedded Linux C++ project" LANGUAGES CXX) # Set C++ standard set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) # set(CMAKE_CXX_COMPILER "/usr/bin/gpp") set(CMAKE_CXX_COMPILER "c++") set(BIN_STATIC false) # Set binary name set(BIN_NAME "test") add_compile_definitions(APP_NAME="${BIN_NAME}") # Set binary suffix based on OS if(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(BIN_SUFFIX ".exe") elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(BIN_SUFFIX ".app") elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(BIN_SUFFIX ".elf") else() set(BIN_SUFFIX ".bin") endif() # Compiler settings for Windows if(MSVC) add_compile_options(/std:c++17) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) endif() # SDL2 & SDL2_ttf setup if(BIN_STATIC) set(SDL2_USE_STATIC_LIBS ON) add_compile_definitions(SDL_STATIC) endif() # List of subprojects to include (e.g., external libraries or modules) set(SubProjects myDynamicLibrary # Example subproject, replace with actual subprojects ) # Copy the font file(COPY ${CMAKE_SOURCE_DIR}/include/Open_Sans/static/OpenSans-Regular.ttf DESTINATION ${CMAKE_BINARY_DIR}/assets) # Add executable add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp) # Set target properties (output name & suffix) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${BIN_NAME} SUFFIX ${BIN_SUFFIX}) # Include SDL2 find_package(SDL2 REQUIRED) find_package(SDL2_ttf REQUIRED) if(BIN_STATIC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") target_include_directories(${PROJECT_NAME} PRIVATE STATIC ${SDL2_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2-static SDL2_ttf::SDL2_ttf-static) else() target_include_directories(${PROJECT_NAME} PRIVATE ${SDL2_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2 SDL2_ttf::SDL2_ttf) endif() # Loop over the subprojects and link them to the main executable foreach(Project IN LISTS SubProjects) # Check if the target for this subproject has been added already if(NOT TARGET ${Project}) # Add the subproject's directory to the build (if not already added) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/${Project}) endif() if(BIN_STATIC) target_link_libraries(${PROJECT_NAME} PRIVATE ${Project} --static) else() target_link_libraries(${PROJECT_NAME} PRIVATE ${Project}) endif() endforeach() # Enable parallel build support include(ProcessorCount) ProcessorCount(N) if(NOT N EQUAL 0) set(CTEST_BUILD_FLAGS -j${N}) set(ctest_test_args ${PROJECT_NAME} PARALLEL_LEVEL ${N}) endif()