CMake_SDL_CPP/CMakeLists.txt
2025-02-22 16:11:34 +01:00

75 lines
2.3 KiB
CMake

# Minimum required version of CMake
cmake_minimum_required(VERSION 3.20)
# Set the project name, version, homepage, and description
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) # Use CXX for C++ projects
# Set a custom application name and definitions
set(BIN_NAME "test")
add_compile_definitions(APP_NAME="${BIN_NAME}")
# Set 1 to compile static (Standalone) or 0 to use shared libraries
set(BIN_STATIC 1)
# Set binary suffix based on the operating system
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()
# For Windows-specific configurations
if(MSVC)
# Uncomment to specify the C++ standard explicitly
add_compile_options(/std:c++11)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
set(BUILD_SHARED_LIBS TRUE)
endif()
# List of subprojects to include (e.g., external libraries or modules)
set(SubProjects
myDynamicLibrary # Example subproject, replace with actual subprojects
)
# Create the main executable, specifying the source file
add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
# Set target properties like output name and suffix
set_target_properties(${PROJECT_NAME}
PROPERTIES
OUTPUT_NAME ${BIN_NAME}
SUFFIX ${BIN_SUFFIX}
)
# 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()
# Link the subproject to the main project executable
if(BIN_STATIC)
target_link_libraries(${PROJECT_NAME} PRIVATE ${Project} -static)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE ${Project})
endif()
endforeach()
# Add processor count and 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()