# 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()