# Minimum required version of CMake cmake_minimum_required(VERSION 3.20) # Set the project name and version project(main VERSION 1.0.0 HOMEPAGE_URL "https://git.noorlander.info" DESCRIPTION "Demo embedded linux C project" LANGUAGES C) # Set a custom application name and definitions set(BIN_NAME "test") add_compile_definitions(APP_NAME="${BIN_NAME}") # 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 ".out") else() set(BIN_SUFFIX ".bin") endif() # For Windows-specific configurations if(MSVC) add_compile_options(/std:c11) 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 testlib # Example subproject ) # Create the main executable, specifying the source file add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c) 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 target_link_libraries(${PROJECT_NAME} PRIVATE ${Project}) endforeach() # Set some application definitions target_compile_definitions(${PROJECT_NAME} PRIVATE MESSAGE="Hello from testlib! from cmake.") target_compile_definitions(${PROJECT_NAME} PRIVATE MAIN_MESSAGE="Hello from main! from cmake.")