CMakeLists.txt 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. if(RVC_DEBUG_MODE)
  7. set(RVCCOMM_LIB RVCCommD)
  8. set(SPBASE_LIB spbased)
  9. set(TOOLKIT_LIB libtoolkitd)
  10. else()
  11. set(RVCCOMM_LIB RVCComm)
  12. set(SPBASE_LIB spbase)
  13. set(TOOLKIT_LIB libtoolkit)
  14. endif(RVC_DEBUG_MODE)
  15. set(MODULE_BASE_LIBS ${SPBASE_LIB} ${TOOLKIT_LIB})
  16. set(MODULE_BASE_ALL_LIBS ${MODULE_BASE_LIBS} ${RVCCOMM_LIB})
  17. if(NOT MSVC)
  18. # list(APPEND MODULE_BASE_LIBS winpr)
  19. endif(NOT MSVC)
  20. set(MODULE_BASE_INCLUDES ${ModuleCommonHeadPath} ${RVC_TOOLKIT_INCLUDE_DIR})
  21. set(BUILD_MOUDLE_TEST OFF)
  22. if(BUILD_TESTING)
  23. # TODO:
  24. endif(BUILD_TESTING)
  25. string(TOLOWER ${BUILD_TYPE_NAME} build_type)
  26. if (build_type STREQUAL debug)
  27. set(BUILD_MOUDLE_TEST ON)
  28. endif()
  29. #对于 Windows 设置实体的版本信息
  30. #定义共享库输出
  31. macro(add_module_libraries _module_prefix _module_name _module_version)
  32. string(STRIP ${_module_version} RAW_VERSION_STRING)
  33. set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")
  34. string(REGEX REPLACE "${VERSION_REGEX}" "\\1" MOD_VERSION_MAJOR "${RAW_VERSION_STRING}")
  35. string(REGEX REPLACE "${VERSION_REGEX}" "\\2" MOD_VERSION_MINOR "${RAW_VERSION_STRING}")
  36. string(REGEX REPLACE "${VERSION_REGEX}" "\\3" MOD_VERSION_REVISION "${RAW_VERSION_STRING}")
  37. string(REGEX REPLACE "${VERSION_REGEX}" "\\4" MOD_VERSION_SUFFIX "${RAW_VERSION_STRING}")
  38. set(MOD_VERSION "${MOD_VERSION_MAJOR}.${MOD_VERSION_MINOR}.${MOD_VERSION_REVISION}")
  39. set(MOD_API_VERSION "${MOD_VERSION_MAJOR}")
  40. if (MOD_VERSION_SUFFIX)
  41. set(MOD_VERSION_FULL "${MOD_VERSION}-${MOD_VERSION_SUFFIX}")
  42. else()
  43. set(MOD_VERSION_FULL "${MOD_VERSION}")
  44. endif()
  45. message(STATUS "${_module_name} version: ${MOD_VERSION_FULL}")
  46. if(WIN32)
  47. set (RC_VERSION_MAJOR ${RVC_VERSION_MAJOR})
  48. set (RC_VERSION_MINOR ${MOD_VERSION_MAJOR})
  49. set (RC_VERSION_BUILD ${MOD_VERSION_MINOR})
  50. set (RC_VERSION_PATCH ${MOD_VERSION_REVISION})
  51. set(RC_VERSION_DESCRIPTION "${CMAKE_SHARED_LIBRARY_PREFIX}${_module_name}_${MOD_VERSION_FULL}${CMAKE_SHARED_LIBRARY_SUFFIX}")
  52. configure_file(
  53. ${CMAKE_SOURCE_DIR}/Version.rc.in
  54. ${CMAKE_CURRENT_BINARY_DIR}/version.rc
  55. @ONLY)
  56. set(${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
  57. endif(WIN32)
  58. set(${_module_name}_TEST_SRCS)
  59. if(BUILD_MOUDLE_TEST)
  60. file(GLOB ${_module_name}_TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test/*.cpp" "test/*.hpp")
  61. endif(BUILD_MOUDLE_TEST)
  62. add_library(${_module_name} SHARED ${${_module_prefix}_SRCS} ${${_module_name}_TEST_SRCS})
  63. # 添加导出宏定义
  64. target_compile_definitions(${_module_name} PUBLIC "${_module_prefix}_EXPORTS")
  65. target_include_directories(${_module_name} PRIVATE ${MODULE_BASE_INCLUDES})
  66. if(BUILD_MOUDLE_TEST)
  67. target_compile_definitions(${_module_name} PRIVATE "WITH_BUILD_MODULE_TEST")
  68. target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
  69. endif(BUILD_MOUDLE_TEST)
  70. configure_file("${MODULE_BASE_DIR}/include/modVer.h.in" "${CMAKE_CURRENT_BINARY_DIR}/modVer.h")
  71. target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
  72. # 设置工程输出路径
  73. if(SIMULATE_DEV_AND_TEST_TEMP)
  74. set_target_properties(${_module_name}
  75. PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/mod")
  76. endif(SIMULATE_DEV_AND_TEST_TEMP)
  77. endmacro(add_module_libraries)
  78. # 设置实体的安装拷贝路径
  79. # 对于 Windows 设置实体项目工程在解决方案的节点
  80. macro(deploy_module _module_prefix _module_name)
  81. if(MSVC)
  82. install(TARGETS ${_module_name}
  83. RUNTIME DESTINATION "${RVC_MODULE_PATH}"
  84. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" EXCLUDE_FROM_ALL
  85. LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT modules)
  86. else(MSVC)
  87. install(TARGETS ${_module_name}
  88. RUNTIME DESTINATION "${RVC_MODULE_PATH}"
  89. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  90. LIBRARY DESTINATION "${RVC_MODULE_PATH}"
  91. COMPONENT modules)
  92. endif(MSVC)
  93. if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS)
  94. install(FILES ${RVC_PDB_BINARY_DIR}/${_module_name}.pdb
  95. DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
  96. endif()
  97. set_property(TARGET ${_module_name} PROPERTY FOLDER "module/")
  98. endmacro(deploy_module)
  99. if(BUILD_MOUDLE_TEST)
  100. message(STATUS "build module test case")
  101. endif(BUILD_MOUDLE_TEST)
  102. set(MODULE_CONAN_DEP_LIBS)
  103. add_subdirectory(mod_validityVertifier)
  104. add_subdirectory(mod_pinpad)
  105. add_subdirectory(mod_cardswiper)
  106. add_subdirectory(mod_CenterSetting)
  107. # 遍历实体
  108. # file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
  109. # foreach(dir ${all_valid_subdirs})
  110. # if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
  111. # string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
  112. # message(STATUS "add module ${dir_trimmed}")
  113. # add_subdirectory(${dir_trimmed})
  114. # endif()
  115. # endforeach(dir)
  116. # 汇总要依赖拷贝的第三方库
  117. set(RVC_CONAN_DEP_LIBS ${RVC_CONAN_DEP_LIBS} ${MODULE_CONAN_DEP_LIBS} PARENT_SCOPE)