CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. cmake_minimum_required(VERSION 3.12)
  2. project(ContainerDPC VERSION 1.0.0 LANGUAGES CXX)
  3. # 设置 C++ 标准
  4. # set(CMAKE_CXX_STANDARD 17)
  5. # set(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. # set(CMAKE_CXX_EXTENSIONS OFF)
  7. # 配置输出目录
  8. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  9. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  10. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
  11. # 设置交付目录
  12. get_filename_component(DELIVER_DIR "${CMAKE_BINARY_DIR}/../../Deliver" ABSOLUTE)
  13. message(STATUS "交付目录: ${DELIVER_DIR}")
  14. # 定义交付库目录
  15. set(DELIVER_LIB_DIR "${DELIVER_DIR}/lib")
  16. message(STATUS "交付库目录: ${DELIVER_LIB_DIR}")
  17. # 确保交付库目录存在
  18. if(NOT EXISTS ${DELIVER_LIB_DIR})
  19. message(FATAL_ERROR "交付库目录不存在: ${DELIVER_LIB_DIR}")
  20. endif()
  21. # 添加链接目录
  22. link_directories(${DELIVER_LIB_DIR})
  23. message(STATUS "添加链接目录: ${DELIVER_LIB_DIR}")
  24. # 设置包含目录(包括交付头文件目录)
  25. set(DELIVER_INCLUDE_DIR "${DELIVER_DIR}/include")
  26. include_directories(
  27. ${DELIVER_INCLUDE_DIR}
  28. )
  29. # 配置源文件
  30. set(SRC_FILES
  31. ContainerDevice.h
  32. ContainerDevice.cpp
  33. ImagePool.h
  34. ImagePool.cpp
  35. ModelIF.h
  36. ContainerDPC.h
  37. ContainerDPC.cpp
  38. ModuleClient.h
  39. ModuleClient.cpp
  40. ModuleConfig.h
  41. ModuleConfig.cpp
  42. ModuleDevice.h
  43. ModuleDevice.cpp
  44. ModuleDriver.h
  45. ModuleDriver.cpp
  46. VirtualDevice.h
  47. VirtualDevice.cpp
  48. ${DELIVER_INCLUDE_DIR}/CCOS.Dev.IODevice.hpp
  49. ${DELIVER_INCLUDE_DIR}/PacketAnalizer.h
  50. ${DELIVER_INCLUDE_DIR}/PacketAnalizer.cpp
  51. ${DELIVER_INCLUDE_DIR}/common_api.h
  52. ${DELIVER_INCLUDE_DIR}/common_api.cpp
  53. ${DELIVER_INCLUDE_DIR}/Base64.cpp
  54. )
  55. # 创建库目标
  56. add_library(ContainerDPC SHARED ${SRC_FILES})
  57. # 设置目标属性
  58. set_target_properties(ContainerDPC PROPERTIES
  59. VERSION ${PROJECT_VERSION}
  60. SOVERSION 1
  61. OUTPUT_NAME "ContainerDPC"
  62. )
  63. # 链接依赖库
  64. if(UNIX AND NOT APPLE)
  65. target_link_libraries(ContainerDPC PRIVATE LogicDevice devClientlib)
  66. message(STATUS "已链接: LogicDevice")
  67. endif()
  68. # 确保交付目录结构存在
  69. file(MAKE_DIRECTORY
  70. "${DELIVER_DIR}/lib"
  71. "${DELIVER_DIR}/bin"
  72. "${DELIVER_DIR}/include"
  73. )
  74. add_custom_command(TARGET ContainerDPC POST_BUILD
  75. COMMENT "===== 复制构建产物到交付目录 ====="
  76. # 复制动态库/导入库
  77. COMMAND ${CMAKE_COMMAND} -E echo "复制库文件..."
  78. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/lib"
  79. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/bin"
  80. # 复制主库文件 (libDPC.so.1.0.0)
  81. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  82. "$<TARGET_FILE:ContainerDPC>"
  83. "${DELIVER_DIR}/lib"
  84. # 复制符号链接 (libDPC.so 和 libDPC.so.1)
  85. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  86. "$<TARGET_LINKER_FILE:ContainerDPC>"
  87. "${DELIVER_DIR}/lib"
  88. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  89. "$<TARGET_SONAME_FILE:ContainerDPC>"
  90. "${DELIVER_DIR}/lib"
  91. # 复制头文件
  92. COMMAND ${CMAKE_COMMAND} -E echo "复制头文件..."
  93. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/include"
  94. )
  95. set(HEADER_NAMES ContainerDPC ModuleDriver ModuleDriver VirtualDevice)
  96. # 一次性复制所有头文件
  97. foreach(header_name IN LISTS HEADER_NAMES)
  98. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.h")
  99. list(APPEND HEADERS_TO_COPY "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.h")
  100. elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.hpp")
  101. list(APPEND HEADERS_TO_COPY "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.hpp")
  102. else()
  103. message(WARNING "未找到头文件: ${header_name}.h 或 ${header_name}.hpp")
  104. endif()
  105. endforeach()
  106. # 添加单个复制命令复制所有头文件
  107. if(HEADERS_TO_COPY)
  108. add_custom_command(TARGET ContainerDPC POST_BUILD
  109. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  110. ${HEADERS_TO_COPY}
  111. "${DELIVER_DIR}/include"
  112. COMMENT "复制头文件到交付目录"
  113. )
  114. endif()