97 lines
2.9 KiB
CMake
97 lines
2.9 KiB
CMake
# 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()
|