仓库提交练习
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
3.0 KiB

cmake_minimum_required(VERSION 3.10)
project(interface_test VERSION 1.0.0 LANGUAGES C CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
option(A_BUILD_MAIN "Build the main executable" ON)
option(MY_BUILD_SHARED_LIBS "Build libraries as shared (.so/.dll) instead of static (.a)" OFF)
set(MY_MEMPOOL_SIZE "800 * 1024" CACHE STRING "Custom memory pool size (e.g., 800*1024 or 2097152)")
set(MY_BUILD_STATIC ON CACHE BOOL "Build libraries as static (.a)")
if(MY_BUILD_SHARED_LIBS)
set(MY_BUILD_STATIC OFF)
endif()
set(GLOBAL_ENABLED_MODULES "" CACHE INTERNAL "List of enabled module targets")
set(GLOBAL_ENABLED_MACROS "" CACHE INTERNAL "List of enabled macros for main")
list(APPEND GLOBAL_ENABLED_MACROS MEM_POOL_TOTAL_SIZE=${MY_MEMPOOL_SIZE})
set(GLOBAL_ENABLED_MACROS ${GLOBAL_ENABLED_MACROS} PARENT_SCOPE)
function(add_module MOD_NAME MOD_PATH)
if(ARGC GREATER 2)
set(DEFAULT_STATE ${ARGV2})
else()
set(DEFAULT_STATE OFF)
endif()
if(ARGC GREATER 3)
set(HAS_TEST ${ARGV2})
set(HAS_TEST ${ARGV3})
else()
set(HAS_TEST OFF)
endif()
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${MOD_PATH}")
message(WARNING "[Root] Module '${MOD_NAME}' skipped: Path '${MOD_PATH}' does not exist!")
# message(FATAL_ERROR "[Root] Module '${MOD_NAME}' failed: Path '${MOD_PATH}' does not exist!")
return()
endif()
string(TOUPPER ${MOD_NAME} MOD_UPPER)
option(BUILD_${MOD_UPPER} "Build ${MOD_NAME} module" ${DEFAULT_STATE})
if(${BUILD_${MOD_UPPER}})
set(BUILD_${MOD_UPPER}_HAS_TEST ${HAS_TEST} CACHE INTERNAL "Has test support")
add_subdirectory(${MOD_PATH})
list(APPEND GLOBAL_ENABLED_MODULES ${MOD_NAME})
list(APPEND GLOBAL_ENABLED_MACROS BUILD_${MOD_UPPER})
message(STATUS "[Root] Enabled module(TestSupport: ${HAS_TEST}): ${MOD_NAME} (Default: ${DEFAULT_STATE}) -> Macro: BUILD_${MOD_UPPER}")
set(GLOBAL_ENABLED_MODULES ${GLOBAL_ENABLED_MODULES} PARENT_SCOPE)
set(GLOBAL_ENABLED_MACROS ${GLOBAL_ENABLED_MACROS} PARENT_SCOPE)
endif()
endfunction()
add_module(base base ON OFF)
add_module(common common ON OFF)
add_module(controller controller OFF ON)
add_module(motor motor OFF ON)
add_module(ctrl2 ctrl2 OFF ON)
add_module(motorTT motorTT OFF ON)
add_module(paint paint OFF ON)
add_module(swing swing OFF ON)
if(A_BUILD_MAIN)
add_subdirectory(main)
endif()
message(STATUS "========================================")
message(STATUS "Enabled Modules: ${GLOBAL_ENABLED_MODULES}")
message(STATUS "Macros for Main: ${GLOBAL_ENABLED_MACROS}")
message(STATUS "Build Static Libs: ${MY_BUILD_STATIC}")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
message(STATUS "========================================")