CMakeLists.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. cmake_minimum_required(VERSION 3.20)
  2. # 工具链路径(用于交叉编译)
  3. set(TOOLCHAIN_PATH /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin)
  4. set(CMAKE_SYSTEM_NAME Linux) # 设置目标系统名字
  5. set(CMAKE_SYSTEM_PROCESSOR aarch64) # 设置目标处理器架构
  6. # set(CMAKE_SYSROOT /opt/poky/1.4.1/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi) # 设置 sysroot
  7. # 设置交叉编译器
  8. set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/aarch64-none-linux-gnu-gcc)
  9. set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/aarch64-none-linux-gnu-g++)
  10. set(CMAKE_AR ${TOOLCHAIN_PATH}/aarch64-none-linux-gnu-ar)
  11. set(CMAKE_LINKER ${TOOLCHAIN_PATH}/aarch64-none-linux-gnu-ld)
  12. set(CMAKE_STRIP ${TOOLCHAIN_PATH}/aarch64-none-linux-gnu-strip)
  13. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  14. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  15. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  16. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  17. project(monitor VERSION 1.0.0 LANGUAGES CXX C)
  18. set(CMAKE_AUTOUIC ON)
  19. set(CMAKE_AUTOMOC ON)
  20. set(CMAKE_AUTORCC ON)
  21. set(CMAKE_CXX_STANDARD 17)
  22. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  23. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  24. set(CMAKE_BUILD_TYPE "Release")
  25. message(STATUS ${CMAKE_C_COMPILER})
  26. message(STATUS ${CMAKE_CXX_COMPILER})
  27. message(STATUS ${CMAKE_AR})
  28. message(STATUS ${CMAKE_LINKER})
  29. message(STATUS ${CMAKE_STRIP})
  30. # 设置自定义 Qt 路径
  31. set(QT5_DIR "/opt/qt/qt5.12.12")
  32. set(CMAKE_PREFIX_PATH
  33. ${QT5_DIR}/lib/cmake
  34. )
  35. find_package(Qt5 REQUIRED COMPONENTS Widgets UiPlugin Network)
  36. set(PROJECT_SOURCE_DIR_LIST
  37. ${CMAKE_CURRENT_SOURCE_DIR}/include
  38. ${CMAKE_CURRENT_SOURCE_DIR}/src
  39. )
  40. foreach(item ${PROJECT_SOURCE_DIR_LIST})
  41. string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" SOURCE_DIR ${item})
  42. message("--------${SOURCE_DIR}--------")
  43. if("${item}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
  44. file(GLOB HEADERS CONFIGURE_DEPENDS ${item}/*.h ${item}/*.hpp)
  45. else()
  46. file(GLOB_RECURSE HEADERS CONFIGURE_DEPENDS ${item}/*.h ${item}/*.hpp)
  47. endif()
  48. foreach(item ${HEADERS})
  49. string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" HEADER_FILE ${item})
  50. message(STATUS ${HEADER_FILE})
  51. list(APPEND PROJECT_HEADERS ${HEADER_FILE})
  52. endforeach()
  53. if("${item}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
  54. file(GLOB SOURCES CONFIGURE_DEPENDS ${item}/*.c ${item}/*.cpp ${item}/*.cc)
  55. else()
  56. file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS ${item}/*.c ${item}/*.cpp ${item}/*.cc)
  57. endif()
  58. foreach(item ${SOURCES})
  59. string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" SOURCE_FILE ${item})
  60. message(STATUS ${SOURCE_FILE})
  61. list(APPEND PROJECT_SOURCES ${SOURCE_FILE})
  62. endforeach()
  63. endforeach()
  64. add_executable(${PROJECT_NAME}
  65. ${PROJECT_HEADERS}
  66. ${PROJECT_SOURCES}
  67. )
  68. target_include_directories(${PROJECT_NAME}
  69. PRIVATE
  70. ${CMAKE_CURRENT_SOURCE_DIR}/include
  71. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/include/libxml2
  72. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/spdlog/include
  73. )
  74. set_target_properties(${PROJECT_NAME} PROPERTIES
  75. RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/bin
  76. )
  77. set(PLUGIN_OUTPUT_DIR ${CMAKE_BINARY_DIR}/output/lib)
  78. add_subdirectory(scadaplugin)
  79. target_include_directories(${PROJECT_NAME}
  80. PRIVATE
  81. scadaplugin/basicwidgets
  82. )
  83. target_link_libraries(${PROJECT_NAME}
  84. PRIVATE
  85. Qt5::Widgets
  86. Qt5::UiPlugin
  87. Qt5::Network
  88. )
  89. target_link_directories(${PROJECT_NAME}
  90. PRIVATE
  91. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib
  92. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/spdlog/lib
  93. )
  94. target_link_libraries(${PROJECT_NAME}
  95. PRIVATE
  96. xml2
  97. spdlog
  98. )
  99. # ===== install =====
  100. install(TARGETS ${PROJECT_NAME}
  101. RUNTIME DESTINATION ${PROJECT_NAME}/bin
  102. )
  103. # install plugin library
  104. install(TARGETS scadaplugin
  105. LIBRARY DESTINATION ${PROJECT_NAME}/plugins
  106. ARCHIVE DESTINATION ${PROJECT_NAME}/plugins
  107. )
  108. # install scripts
  109. install(FILES
  110. ${CMAKE_CURRENT_SOURCE_DIR}/scripts/run.sh
  111. DESTINATION ${PROJECT_NAME}
  112. PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
  113. GROUP_EXECUTE GROUP_READ
  114. WORLD_EXECUTE WORLD_READ
  115. )
  116. # install third-party libraries
  117. install(FILES
  118. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib/libxml2.so
  119. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib/libxml2.so.16
  120. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib/libxml2.so.16.2.0
  121. DESTINATION ${PROJECT_NAME}/lib
  122. DESTINATION ${PROJECT_NAME}/lib
  123. )
  124. message(STATUS "install prefix: ${CMAKE_INSTALL_PREFIX}")