CMakeLists.txt 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. cmake_minimum_required(VERSION 3.12)
  2. project(CCOS.Dev.FPD.Demo 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. get_filename_component(PhysicalDevice_DELIVER_DIR "${CMAKE_BINARY_DIR}/../../Deliver" ABSOLUTE)
  14. message(STATUS "交付目录: ${DELIVER_DIR}")
  15. # 定义交付库目录
  16. set(DELIVER_LIB_DIR "${DELIVER_DIR}/lib")
  17. message(STATUS "交付库目录: ${DELIVER_LIB_DIR}")
  18. # 确保交付库目录存在
  19. if(NOT EXISTS ${DELIVER_LIB_DIR})
  20. message(FATAL_ERROR "交付库目录不存在: ${DELIVER_LIB_DIR}")
  21. endif()
  22. # 添加链接目录
  23. link_directories(${DELIVER_LIB_DIR})
  24. message(STATUS "添加链接目录: ${DELIVER_LIB_DIR}")
  25. # 设置包含目录(包括交付头文件目录)
  26. set(DELIVER_INCLUDE_DIR "${DELIVER_DIR}/include")
  27. set(PhysicalDevice_DELIVER_INCLUDE_DIR "${PhysicalDevice_DELIVER_DIR}/Include")
  28. include_directories(
  29. ${DELIVER_INCLUDE_DIR}
  30. ${PhysicalDevice_DELIVER_INCLUDE_DIR}
  31. )
  32. message(STATUS "包含交付头文件目录: ${DELIVER_INCLUDE_DIR}")
  33. # 配置源文件
  34. set(SRC_FILES
  35. dcm.hpp
  36. DetectorConfiguration.h
  37. DetectorConfiguration.cpp
  38. CCOS.Dev.FPD.Demo.cpp
  39. CCOS.Dev.FPD.Demo.h
  40. DeviceErrorCode.h
  41. DeviceErrorInfor.h
  42. FPDCtrlDefinition.h
  43. FPDErrorWarningProcess.h
  44. FPDErrorWarningProcess.cpp
  45. OEM.Acq.h
  46. OEM.Acq.cpp
  47. OEM.Calib.h
  48. OEM.Calib.cpp
  49. OEM.DetectorCtrl.h
  50. OEM.DetectorCtrl.cpp
  51. OEM.Sync.h
  52. OEM.Sync.cpp
  53. SeqImages.h
  54. SeqImages.cpp
  55. ${PhysicalDevice_DELIVER_INCLUDE_DIR}/CCOS.Dev.MSGMould.hpp
  56. ${PhysicalDevice_DELIVER_INCLUDE_DIR}/CCOS.Dev.MSGMould.cpp
  57. ${DELIVER_INCLUDE_DIR}/Base64.cpp
  58. ${DELIVER_INCLUDE_DIR}/common_api.h
  59. ${DELIVER_INCLUDE_DIR}/FileVersion.cpp
  60. ${DELIVER_INCLUDE_DIR}/FileVersion.hpp
  61. )
  62. # 创建库目标
  63. add_library(CCOS.Dev.FPD.Demo SHARED ${SRC_FILES})
  64. # 设置目标属性
  65. set_target_properties(CCOS.Dev.FPD.Demo PROPERTIES
  66. VERSION ${PROJECT_VERSION}
  67. SOVERSION 1
  68. OUTPUT_NAME "CCOS.Dev.FPD.Demo"
  69. )
  70. # 在Linux上设置RPATH,优先在自身目录查找依赖库
  71. if(UNIX AND NOT APPLE)
  72. set_target_properties(CCOS.Dev.FPD.Demo PROPERTIES
  73. INSTALL_RPATH "$ORIGIN"
  74. BUILD_WITH_INSTALL_RPATH TRUE
  75. )
  76. endif()
  77. # 链接依赖库
  78. if(UNIX AND NOT APPLE)
  79. target_link_libraries(CCOS.Dev.FPD.Demo PRIVATE common_api CCOS.Dev.IODevice CCOS.Dev.FPDDeviceMould)
  80. message(STATUS "已链接: CCOS.Dev.IODevice CCOS.Dev.FPDDeviceMould ")
  81. endif()
  82. # 确保交付目录结构存在
  83. file(MAKE_DIRECTORY
  84. "${DELIVER_DIR}/lib"
  85. "${DELIVER_DIR}/bin"
  86. "${DELIVER_DIR}/include"
  87. )
  88. add_custom_command(TARGET CCOS.Dev.FPD.Demo POST_BUILD
  89. COMMENT "===== 复制构建产物到交付目录 ====="
  90. # 复制动态库/导入库
  91. COMMAND ${CMAKE_COMMAND} -E echo "复制库文件..."
  92. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/lib"
  93. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/bin"
  94. # 复制主库文件 (libDPC.so.1.0.0)
  95. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  96. "$<TARGET_FILE:CCOS.Dev.FPD.Demo>"
  97. "${DELIVER_DIR}/lib"
  98. # 复制符号链接 (libDPC.so 和 libDPC.so.1)
  99. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  100. "$<TARGET_LINKER_FILE:CCOS.Dev.FPD.Demo>"
  101. "${DELIVER_DIR}/lib"
  102. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  103. "$<TARGET_SONAME_FILE:CCOS.Dev.FPD.Demo>"
  104. "${DELIVER_DIR}/lib"
  105. # 复制头文件
  106. COMMAND ${CMAKE_COMMAND} -E echo "复制头文件..."
  107. COMMAND ${CMAKE_COMMAND} -E make_directory "${DELIVER_DIR}/include"
  108. )
  109. # 单独处理头文件复制(支持多配置生成器)
  110. set(HEADER_TO_COPY)
  111. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CCOS.Dev.FPD.Demo.h")
  112. set(HEADER_TO_COPY "${CMAKE_CURRENT_SOURCE_DIR}/CCOS.Dev.FPD.Demo.h")
  113. elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CCOS.Dev.FPD.Demo.hpp")
  114. set(HEADER_TO_COPY "${CMAKE_CURRENT_SOURCE_DIR}/CCOS.Dev.FPD.Demo.hpp")
  115. endif()
  116. if(HEADER_TO_COPY)
  117. add_custom_command(TARGET CCOS.Dev.FPD.Demo POST_BUILD
  118. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  119. "${HEADER_TO_COPY}"
  120. "${DELIVER_DIR}/include"
  121. COMMENT "复制头文件: ${HEADER_TO_COPY}"
  122. )
  123. else()
  124. message(WARNING "未找到与目标 CCOS.Dev.FPD.Demo 同名的头文件")
  125. endif()