CMakeLists.txt 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #设置实体名称 ${MODULE_NAME},和实体前缀定义 ${MODULE_PREFIX}
  2. macro(define_module _module_name)
  3. set(MODULE_NAME "mod_${_module_name}")
  4. set(ENTITY_NAME "${_module_name}")
  5. string(TOUPPER "${MODULE_NAME}" MODULE_PREFIX)
  6. endmacro(define_module)
  7. if(RVC_DEBUG_MODE)
  8. set(RVCCOMM_LIB RVCCommD)
  9. set(SPBASE_LIB spbased)
  10. set(TOOLKIT_LIB libtoolkitd)
  11. else()
  12. set(RVCCOMM_LIB RVCComm)
  13. set(SPBASE_LIB spbase)
  14. set(TOOLKIT_LIB libtoolkit)
  15. endif(RVC_DEBUG_MODE)
  16. set(WINPR_LIB winpr2)
  17. set(MODULE_BASE_LIBS ${SPBASE_LIB} ${TOOLKIT_LIB})
  18. set(MODULE_BASE_ALL_LIBS ${MODULE_BASE_LIBS} ${RVCCOMM_LIB})
  19. if(NOT MSVC)
  20. list(APPEND MODULE_BASE_LIBS ${WINPR_LIB})
  21. endif(NOT MSVC)
  22. set(MODULE_BASE_INCLUDES ${ModuleCommonHeadPath} ${RVC_TOOLKIT_INCLUDE_DIR})
  23. SET(RVC_COMMON_INCLUDE_DIR ${CONAN_RVCFRAMEWORK_ROOT}/include/Common PARENT_SCOPE)
  24. SET(RVC_TOOLKIT_INCLUDE_DIR ${CONAN_RVCFRAMEWORK_ROOT}/include/libtoolkit PARENT_SCOPE)
  25. SET(RVC_WINPR_INCLUDE_DIR ${CONAN_RVCFRAMEWORK_ROOT}/include)
  26. SET(RVC_FRAMEWORK_LIBRARIES_DIR ${CONAN_LIB_DIRS_RVCFRAMEWORK})
  27. SET(RVC_FRAMEWORK_INCLUDES_DIR ${RVC_COMMON_INCLUDE_DIR}
  28. ${RVC_TOOLKIT_INCLUDE_DIR} ${RVC_WINPR_INCLUDE_DIR})
  29. set(BUILD_MOUDLE_TEST OFF)
  30. if(BUILD_TESTING)
  31. set(BUILD_MOUDLE_TEST ON)
  32. endif(BUILD_TESTING)
  33. if(SIMULATE_ON)
  34. rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
  35. endif(SIMULATE_ON)
  36. #对于 Windows 设置实体的版本信息
  37. #定义共享库输出
  38. macro(add_module_libraries _module_prefix _module_name _module_version)
  39. string(STRIP ${_module_version} RAW_VERSION_STRING)
  40. set(VERSION_REGEX "^.?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)")
  41. string(REGEX REPLACE "${VERSION_REGEX}" "\\1" MOD_VERSION_MAJOR "${RAW_VERSION_STRING}")
  42. string(REGEX REPLACE "${VERSION_REGEX}" "\\2" MOD_VERSION_MINOR "${RAW_VERSION_STRING}")
  43. string(REGEX REPLACE "${VERSION_REGEX}" "\\3" MOD_VERSION_REVISION "${RAW_VERSION_STRING}")
  44. string(REGEX REPLACE "${VERSION_REGEX}" "\\4" MOD_VERSION_SUFFIX "${RAW_VERSION_STRING}")
  45. set(MOD_VERSION "${MOD_VERSION_MAJOR}.${MOD_VERSION_MINOR}.${MOD_VERSION_REVISION}")
  46. set(MOD_API_VERSION "${MOD_VERSION_MAJOR}")
  47. if (MOD_VERSION_SUFFIX)
  48. set(MOD_VERSION_FULL "${MOD_VERSION}-${MOD_VERSION_SUFFIX}")
  49. else()
  50. set(MOD_VERSION_FULL "${MOD_VERSION}")
  51. endif()
  52. message(STATUS "${_module_name} version: ${MOD_VERSION_FULL}")
  53. if(WIN32)
  54. set (RC_VERSION_MAJOR ${RVC_VERSION_MAJOR})
  55. set (RC_VERSION_MINOR ${MOD_VERSION_MAJOR})
  56. set (RC_VERSION_BUILD ${MOD_VERSION_MINOR})
  57. set (RC_VERSION_PATCH ${MOD_VERSION_REVISION})
  58. set(RC_VERSION_DESCRIPTION "${CMAKE_SHARED_LIBRARY_PREFIX}${_module_name}_${MOD_VERSION_FULL}${CMAKE_SHARED_LIBRARY_SUFFIX}")
  59. configure_file(
  60. ${CMAKE_SOURCE_DIR}/Version.rc.in
  61. ${CMAKE_CURRENT_BINARY_DIR}/version.rc
  62. @ONLY)
  63. set(${_module_prefix}_SRCS ${${_module_prefix}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
  64. endif(WIN32)
  65. set(${_module_name}_TEST_SRCS)
  66. if(BUILD_MOUDLE_TEST)
  67. file(GLOB ${_module_name}_TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test/*.cpp" "test/*.hpp")
  68. endif(BUILD_MOUDLE_TEST)
  69. add_library(${_module_name} SHARED ${${_module_prefix}_SRCS} ${${_module_name}_TEST_SRCS})
  70. # 设置工程输出路径,这操作在 Linux 才有效,在 Windows 感觉抽风了,死活不行,只能通过全局的方式进行设置
  71. if(SIMULATE_ON)
  72. set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_PATH "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
  73. set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
  74. set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
  75. set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
  76. # etc for the other available configuration types (MinSizeRel, RelWithDebInfo)
  77. endif()
  78. # 添加导出宏定义
  79. target_compile_definitions(${_module_name} PUBLIC "${_module_prefix}_EXPORTS")
  80. target_include_directories(${_module_name} PRIVATE ${MODULE_BASE_INCLUDES})
  81. if(BUILD_MOUDLE_TEST)
  82. target_compile_definitions(${_module_name} PRIVATE "WITH_BUILD_MODULE_TEST")
  83. target_include_directories(${_module_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
  84. endif(BUILD_MOUDLE_TEST)
  85. configure_file("${MODULE_BASE_DIR}/include/modVer.h.in" "${CMAKE_CURRENT_BINARY_DIR}/modVer.h")
  86. target_include_directories(${_module_name} PRIVATE
  87. ${CMAKE_CURRENT_BINARY_DIR}
  88. ${RVC_FRAMEWORK_INCLUDES_DIR}
  89. )
  90. target_link_directories(${_module_name} PRIVATE
  91. ${RVC_FRAMEWORK_LIBRARIES_DIR})
  92. endmacro(add_module_libraries)
  93. # 设置实体的安装拷贝路径
  94. # 对于 Windows 设置实体项目工程在解决方案的节点
  95. macro(deploy_module _module_prefix _module_name)
  96. if(MSVC)
  97. install(TARGETS ${_module_name}
  98. RUNTIME DESTINATION "${RVC_MODULE_PATH}"
  99. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" EXCLUDE_FROM_ALL
  100. LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT modules)
  101. else(MSVC)
  102. install(TARGETS ${_module_name}
  103. RUNTIME DESTINATION "${RVC_MODULE_PATH}"
  104. ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
  105. LIBRARY DESTINATION "${RVC_MODULE_PATH}"
  106. COMPONENT modules)
  107. endif(MSVC)
  108. if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS)
  109. install(FILES ${RVC_PDB_BINARY_DIR}/${_module_name}.pdb
  110. DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT symbols)
  111. endif()
  112. set_property(TARGET ${_module_name} PROPERTY FOLDER "module/")
  113. endmacro(deploy_module)
  114. if(BUILD_TESTING)
  115. add_subdirectory(include/test)
  116. endif()
  117. if(BUILD_MOUDLE_TEST)
  118. message(STATUS "build module test case")
  119. endif(BUILD_MOUDLE_TEST)
  120. set(MODULE_CONAN_DEP_LIBS)
  121. # 遍历实体
  122. # rvc_add_all_cmake_subdirectory()
  123. add_subdirectory(mod_validityVertifier)
  124. add_subdirectory(mod_deviceswitch)
  125. add_subdirectory(mod_CardReadAdapter)
  126. add_subdirectory(mod_cardissuer)
  127. add_subdirectory(mod_pinpad)
  128. add_subdirectory(mod_IDCertificate)
  129. add_subdirectory(mod_CustMngrAuth)
  130. add_subdirectory(mod_FingerPrint)
  131. add_subdirectory(mod_customeraware)
  132. add_subdirectory(mod_interactivecontrol)
  133. add_subdirectory(mod_assistantchannel)
  134. add_subdirectory(mod_upload)
  135. add_subdirectory(mod_download)
  136. add_subdirectory(mod_healthmanager)
  137. add_subdirectory(mod_Initializer)
  138. add_subdirectory(mod_accessauth)
  139. add_subdirectory(mod_guiconsole)
  140. add_subdirectory(mod_CenterSetting)
  141. add_subdirectory(mod_tokenmgr)
  142. add_subdirectory(mod_evtconverter)
  143. add_subdirectory(mod_interactivelog)
  144. add_subdirectory(mod_chromium)
  145. add_subdirectory(mod_watchdog)
  146. add_subdirectory(mod_counterconnector)
  147. # 汇总要依赖拷贝的第三方库
  148. set(RVC_CONAN_DEP_LIBS ${RVC_CONAN_DEP_LIBS} ${MODULE_CONAN_DEP_LIBS} PARENT_SCOPE)
  149. if(TEST_CHROMIMU_DIR)
  150. set (CEF_BIN_DIR ${TEST_CHROMIMU_DIR} PARENT_SCOPE)
  151. endif()