CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. cmake_minimum_required(VERSION 3.12)
  2. project(CDI 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. ${DELIVER_INCLUDE_DIR}/Img_header
  29. )
  30. # 配置源文件
  31. set(SRC_FILES
  32. CDI.h
  33. CDI.cpp
  34. debug.h
  35. debug.cpp
  36. DriverManager.h
  37. DriverManager.cpp
  38. DrvTree.h
  39. DrvTree.cpp
  40. HandleManager.h
  41. HandleManager.cpp
  42. Notify_Thread.h
  43. Notify_Thread.cpp
  44. PacketCommon.h
  45. PacketCommon.cpp
  46. ProcThreadManager.h
  47. ProcThreadManager.cpp
  48. ${DELIVER_INCLUDE_DIR}/PacketAnalizer.h
  49. ${DELIVER_INCLUDE_DIR}/PacketAnalizer.cpp
  50. ${DELIVER_INCLUDE_DIR}/common_api.h
  51. ${DELIVER_INCLUDE_DIR}/common_api.cpp
  52. )
  53. # 创建库目标
  54. add_library(CDI SHARED ${SRC_FILES})
  55. # 设置目标属性
  56. set_target_properties(CDI PROPERTIES
  57. VERSION ${PROJECT_VERSION}
  58. SOVERSION 1
  59. OUTPUT_NAME "CDI"
  60. )
  61. # 链接依赖库
  62. if(UNIX AND NOT APPLE)
  63. target_link_libraries(CDI PRIVATE
  64. Crc64
  65. DeviceBus
  66. DevTree
  67. CcosFileHandle
  68. CcosLock
  69. CcosThread
  70. DPC
  71. LocalConfig
  72. LogicClient
  73. LogicDevice
  74. NewModelDPC
  75. OemBusUnit
  76. ResDataObject
  77. ContainerDPC
  78. )
  79. message(STATUS "已链接: LogicDevice")
  80. endif()
  81. # 确保交付目录结构存在
  82. file(MAKE_DIRECTORY
  83. "${DELIVER_DIR}/lib"
  84. "${DELIVER_DIR}/bin"
  85. "${DELIVER_DIR}/include"
  86. )
  87. add_custom_command(TARGET CDI POST_BUILD
  88. COMMENT "===== 复制构建产物到交付目录 ====="
  89. # 复制动态库/导入库
  90. COMMAND ${CMAKE_COMMAND} -E echo "复制库文件..."
  91. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/lib"
  92. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/bin"
  93. # 复制主库文件 (libDPC.so.1.0.0)
  94. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  95. "$<TARGET_FILE:CDI>"
  96. "${DELIVER_DIR}/lib"
  97. # 复制符号链接 (libDPC.so 和 libDPC.so.1)
  98. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  99. "$<TARGET_LINKER_FILE:CDI>"
  100. "${DELIVER_DIR}/lib"
  101. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  102. "$<TARGET_SONAME_FILE:CDI>"
  103. "${DELIVER_DIR}/lib"
  104. # 复制头文件
  105. COMMAND ${CMAKE_COMMAND} -E echo "复制头文件..."
  106. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/include"
  107. )
  108. set(HEADER_NAMES CDI)
  109. # 一次性复制所有头文件
  110. foreach(header_name IN LISTS HEADER_NAMES)
  111. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.h")
  112. list(APPEND HEADERS_TO_COPY "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.h")
  113. elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.hpp")
  114. list(APPEND HEADERS_TO_COPY "${CMAKE_CURRENT_SOURCE_DIR}/${header_name}.hpp")
  115. else()
  116. message(WARNING "未找到头文件: ${header_name}.h 或 ${header_name}.hpp")
  117. endif()
  118. endforeach()
  119. # 添加单个复制命令复制所有头文件
  120. if(HEADERS_TO_COPY)
  121. add_custom_command(TARGET CDI POST_BUILD
  122. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  123. ${HEADERS_TO_COPY}
  124. "${DELIVER_DIR}/include"
  125. COMMENT "复制头文件到交付目录"
  126. )
  127. endif()