CMakeLists.txt 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. #对于 Windows 设置实体的版本信息
  12. #定义共享库输出
  13. macro(add_module_libraries _module_prefix _module_name _module_version)
  14. string(STRIP ${_module_version} RAW_VERSION_STRING)
  15. set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")
  16. string(REGEX REPLACE "${VERSION_REGEX}" "\\1" MOD_VERSION_MAJOR "${RAW_VERSION_STRING}")
  17. string(REGEX REPLACE "${VERSION_REGEX}" "\\2" MOD_VERSION_MINOR "${RAW_VERSION_STRING}")
  18. string(REGEX REPLACE "${VERSION_REGEX}" "\\3" MOD_VERSION_REVISION "${RAW_VERSION_STRING}")
  19. string(REGEX REPLACE "${VERSION_REGEX}" "\\4" MOD_VERSION_SUFFIX "${RAW_VERSION_STRING}")
  20. set(MOD_VERSION "${MOD_VERSION_MAJOR}.${MOD_VERSION_MINOR}.${MOD_VERSION_REVISION}")
  21. set(MOD_API_VERSION "${MOD_VERSION_MAJOR}")
  22. if (MOD_VERSION_SUFFIX)
  23. set(MOD_VERSION_FULL "${MOD_VERSION}-${MOD_VERSION_SUFFIX}")
  24. else()
  25. set(MOD_VERSION_FULL "${MOD_VERSION}")
  26. endif()
  27. if(WIN32)
  28. set (RC_VERSION_MAJOR ${RVC_VERSION_MAJOR})
  29. set (RC_VERSION_MINOR ${MOD_VERSION_MAJOR})
  30. set (RC_VERSION_BUILD ${MOD_VERSION_MINOR})
  31. set (RC_VERSION_PATCH ${MOD_VERSION_REVISION})
  32. set(RC_VERSION_DESCRIPTION "${CMAKE_SHARED_LIBRARY_PREFIX}${_module_name}_${MOD_VERSION_FULL}${CMAKE_SHARED_LIBRARY_SUFFIX}")
  33. configure_file(
  34. ${CMAKE_SOURCE_DIR}/Version.rc.in
  35. ${CMAKE_CURRENT_BINARY_DIR}/version.rc
  36. @ONLY)
  37. set(${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
  38. endif(WIN32)
  39. add_library(${_module_name} SHARED ${${_module_prefix}_SRCS})
  40. # 添加导出宏定义
  41. target_compile_definitions(${_module_name} PUBLIC "${_module_prefix}_EXPORTS")
  42. target_include_directories(${_module_name} PRIVATE ${MODULE_BASE_INCLUDES})
  43. configure_file("${MODULE_BASE_DIR}/include/modVer.h.in" "${CMAKE_CURRENT_BINARY_DIR}/modVer.h")
  44. target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
  45. # 设置工程输出路径
  46. if(SIMULATE_DEV_AND_TEST_TEMP)
  47. set_target_properties(${_module_name}
  48. PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/mod")
  49. endif(SIMULATE_DEV_AND_TEST_TEMP)
  50. endmacro(add_module_libraries)
  51. # 设置实体的安装拷贝路径
  52. # 对于 Windows 设置实体项目工程在解决方案的节点
  53. macro(deploy_module _module_prefix _module_name)
  54. install(TARGETS ${_module_name}
  55. RUNTIME DESTINATION "${RVC_MODULE_PATH}"
  56. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  57. LIBRARY DESTINATION "${RVC_LIBRARY_PATH}"
  58. COMPONENT modules)
  59. if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS)
  60. install(FILES ${CMAKE_PDB_BINARY_DIR}/${_module_name}.pdb
  61. DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
  62. endif()
  63. set_property(TARGET ${_module_name} PROPERTY FOLDER "test/module/")
  64. endmacro(deploy_module)
  65. set(MODULE_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  66. # 遍历实体
  67. file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  68. foreach(dir ${all_valid_subdirs})
  69. if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  70. string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  71. message(STATUS "add test module ${dir_trimmed}")
  72. add_subdirectory(${dir_trimmed})
  73. endif()
  74. endforeach(dir)