CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #设置实体名称 ${MODULE_NAME},和实体前缀定义 ${MODULE_PREFIX}
  2. macro(define_moudle _module_name)
  3. set(MODULE_NAME "mod_${_module_name}")
  4. string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
  5. endmacro(define_moudle)
  6. set(MODULE_BASE_LIBS spbase libtoolkit)
  7. if(NOT MSVC)
  8. # list(APPEND MODULE_BASE_LIBS winpr)
  9. endif(NOT MSVC)
  10. set(MODULE_BASE_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include ${RVC_TOOLKIT_INCLUDE_DIR})
  11. set(BUILD_MOUDLE_TEST OFF)
  12. if(BUILD_TESTING)
  13. # TODO:
  14. endif(BUILD_TESTING)
  15. string(TOLOWER ${BUILD_TYPE_NAME} build_type)
  16. if (build_type STREQUAL debug)
  17. set(BUILD_MOUDLE_TEST ON)
  18. endif()
  19. #对于 Windows 设置实体的版本信息
  20. #定义共享库输出
  21. macro(add_module_libraries _module_prefix _module_name _module_version)
  22. string(STRIP ${_module_version} RAW_VERSION_STRING)
  23. set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")
  24. string(REGEX REPLACE "${VERSION_REGEX}" "\\1" MOD_VERSION_MAJOR "${RAW_VERSION_STRING}")
  25. string(REGEX REPLACE "${VERSION_REGEX}" "\\2" MOD_VERSION_MINOR "${RAW_VERSION_STRING}")
  26. string(REGEX REPLACE "${VERSION_REGEX}" "\\3" MOD_VERSION_REVISION "${RAW_VERSION_STRING}")
  27. string(REGEX REPLACE "${VERSION_REGEX}" "\\4" MOD_VERSION_SUFFIX "${RAW_VERSION_STRING}")
  28. set(MOD_VERSION "${MOD_VERSION_MAJOR}.${MOD_VERSION_MINOR}.${MOD_VERSION_REVISION}")
  29. set(MOD_API_VERSION "${MOD_VERSION_MAJOR}")
  30. if (MOD_VERSION_SUFFIX)
  31. set(MOD_VERSION_FULL "${MOD_VERSION}-${MOD_VERSION_SUFFIX}")
  32. else()
  33. set(MOD_VERSION_FULL "${MOD_VERSION}")
  34. endif()
  35. if(WIN32)
  36. set (RC_VERSION_MAJOR ${RVC_VERSION_MAJOR})
  37. set (RC_VERSION_MINOR ${MOD_VERSION_MAJOR})
  38. set (RC_VERSION_BUILD ${MOD_VERSION_MINOR})
  39. set (RC_VERSION_PATCH ${MOD_VERSION_REVISION})
  40. set(RC_VERSION_DESCRIPTION "${CMAKE_SHARED_LIBRARY_PREFIX}${_module_name}_${MOD_VERSION_FULL}${CMAKE_SHARED_LIBRARY_SUFFIX}")
  41. configure_file(
  42. ${CMAKE_SOURCE_DIR}/Version.rc.in
  43. ${CMAKE_CURRENT_BINARY_DIR}/version.rc
  44. @ONLY)
  45. set(${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
  46. endif(WIN32)
  47. add_library(${_module_name} SHARED ${${_module_prefix}_SRCS})
  48. # 添加导出宏定义
  49. target_compile_definitions(${_module_name} PUBLIC "${_module_prefix}_EXPORTS")
  50. target_include_directories(${_module_name} PRIVATE ${MODULE_BASE_INCLUDES})
  51. if(BUILD_MOUDLE_TEST)
  52. target_compile_definitions(${_module_name} PRIVATE "WITH_BUILD_MODULE_TEST")
  53. target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
  54. endif(BUILD_MOUDLE_TEST)
  55. configure_file("${MODULE_BASE_DIR}/include/modVer.h.in" "${CMAKE_CURRENT_BINARY_DIR}/modVer.h")
  56. target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
  57. # 设置工程输出路径
  58. if(SIMULATE_DEV_AND_TEST_TEMP)
  59. set_target_properties(${_module_name}
  60. PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/mod")
  61. endif(SIMULATE_DEV_AND_TEST_TEMP)
  62. endmacro(add_module_libraries)
  63. # 设置实体的安装拷贝路径
  64. # 对于 Windows 设置实体项目工程在解决方案的节点
  65. macro(deploy_module _module_prefix _module_name)
  66. install(TARGETS ${_module_name}
  67. RUNTIME DESTINATION "${RVC_MODULE_PATH}"
  68. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  69. LIBRARY DESTINATION "${RVC_LIBRARY_PATH}"
  70. COMPONENT modules)
  71. if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS)
  72. install(FILES ${RVC_PDB_BINARY_DIR}/${_module_name}.pdb
  73. DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
  74. endif()
  75. set_property(TARGET ${_module_name} PROPERTY FOLDER "test/module/")
  76. endmacro(deploy_module)
  77. set(MODULE_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  78. if(BUILD_MOUDLE_TEST)
  79. message(STATUS "build module test case")
  80. endif(BUILD_MOUDLE_TEST)
  81. # 遍历实体
  82. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  83. foreach(dir ${all_valid_subdirs})
  84. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  85. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  86. message(STATUS "add test module ${dir_trimmed}")
  87. add_subdirectory(${dir_trimmed})
  88. endif()
  89. endforeach(dir)