CMakeLists.txt 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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_RANLIB ${TOOLCHAIN_PATH}/aarch64-none-linux-gnu-ranlib)
  14. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  15. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  16. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  17. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  18. project(monitor VERSION 1.0.0 LANGUAGES CXX C)
  19. set(CMAKE_AUTOUIC ON)
  20. set(CMAKE_AUTOMOC ON)
  21. set(CMAKE_AUTORCC ON)
  22. set(CMAKE_CXX_STANDARD 17)
  23. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  24. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  25. # set(CMAKE_BUILD_TYPE "Release")
  26. message(STATUS ${CMAKE_C_COMPILER})
  27. message(STATUS ${CMAKE_CXX_COMPILER})
  28. message(STATUS ${CMAKE_AR})
  29. message(STATUS ${CMAKE_LINKER})
  30. message(STATUS ${CMAKE_STRIP})
  31. message(STATUS ${CMAKE_RANLIB})
  32. # 设置自定义 Qt 路径
  33. set(CMAKE_PREFIX_PATH /opt/qt/qt5.12.12-rk3588)
  34. set(QT5_DIR /opt/qt/qt5.12.12-rk3588/lib/cmake/Qt5)
  35. # 获取 Git 信息(可选)
  36. execute_process(
  37. COMMAND git rev-parse --short=10 HEAD
  38. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  39. OUTPUT_VARIABLE GIT_COMMIT_HASH
  40. OUTPUT_STRIP_TRAILING_WHITESPACE
  41. )
  42. execute_process(
  43. COMMAND git rev-parse --abbrev-ref HEAD
  44. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  45. OUTPUT_VARIABLE GIT_BRANCH
  46. OUTPUT_STRIP_TRAILING_WHITESPACE
  47. )
  48. string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S")
  49. # 将变量写入 version.h
  50. configure_file(
  51. ${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in
  52. ${CMAKE_CURRENT_SOURCE_DIR}/include/version.h
  53. @ONLY
  54. )
  55. find_package(Qt5 REQUIRED COMPONENTS Widgets UiPlugin Network SerialPort)
  56. set(PROJECT_SOURCE_DIR_LIST
  57. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cpp-httplib
  58. ${CMAKE_CURRENT_SOURCE_DIR}/include
  59. ${CMAKE_CURRENT_SOURCE_DIR}/src
  60. )
  61. foreach(item ${PROJECT_SOURCE_DIR_LIST})
  62. string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" SOURCE_DIR ${item})
  63. message("--------${SOURCE_DIR}--------")
  64. if("${item}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
  65. file(GLOB HEADERS CONFIGURE_DEPENDS ${item}/*.h ${item}/*.hpp)
  66. else()
  67. file(GLOB_RECURSE HEADERS CONFIGURE_DEPENDS ${item}/*.h ${item}/*.hpp)
  68. endif()
  69. foreach(item ${HEADERS})
  70. string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" HEADER_FILE ${item})
  71. message(STATUS ${HEADER_FILE})
  72. list(APPEND PROJECT_HEADERS ${HEADER_FILE})
  73. endforeach()
  74. if("${item}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
  75. file(GLOB SOURCES CONFIGURE_DEPENDS ${item}/*.c ${item}/*.cpp ${item}/*.cc)
  76. else()
  77. file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS ${item}/*.c ${item}/*.cpp ${item}/*.cc)
  78. endif()
  79. foreach(item ${SOURCES})
  80. string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" SOURCE_FILE ${item})
  81. message(STATUS ${SOURCE_FILE})
  82. list(APPEND PROJECT_SOURCES ${SOURCE_FILE})
  83. endforeach()
  84. endforeach()
  85. add_executable(${PROJECT_NAME}
  86. ${PROJECT_HEADERS}
  87. ${PROJECT_SOURCES}
  88. )
  89. target_include_directories(${PROJECT_NAME}
  90. PRIVATE
  91. ${CMAKE_CURRENT_SOURCE_DIR}/include
  92. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/include/libxml2
  93. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/spdlog/include
  94. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cpp-httplib
  95. )
  96. set_target_properties(${PROJECT_NAME} PROPERTIES
  97. RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/bin
  98. )
  99. set(PLUGIN_OUTPUT_DIR ${CMAKE_BINARY_DIR}/output/lib)
  100. add_subdirectory(scadaplugin)
  101. target_include_directories(${PROJECT_NAME}
  102. PRIVATE
  103. scadaplugin/basicwidgets
  104. )
  105. target_link_libraries(${PROJECT_NAME}
  106. PRIVATE
  107. Qt5::Widgets
  108. Qt5::UiPlugin
  109. Qt5::Network
  110. Qt5::SerialPort
  111. )
  112. target_link_directories(${PROJECT_NAME}
  113. PRIVATE
  114. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib
  115. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/spdlog/lib
  116. )
  117. target_link_libraries(${PROJECT_NAME}
  118. PRIVATE
  119. xml2
  120. spdlog
  121. )
  122. # ===== install =====
  123. install(TARGETS ${PROJECT_NAME}
  124. RUNTIME DESTINATION ${PROJECT_NAME}/bin
  125. )
  126. # install plugin library
  127. install(TARGETS scadaplugin
  128. LIBRARY DESTINATION ${PROJECT_NAME}/plugins
  129. ARCHIVE DESTINATION ${PROJECT_NAME}/plugins
  130. )
  131. # install monitor.xml
  132. install(FILES
  133. ${CMAKE_CURRENT_SOURCE_DIR}/tests/monitor.xml
  134. DESTINATION ${PROJECT_NAME}/conf
  135. PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
  136. GROUP_EXECUTE GROUP_READ
  137. WORLD_EXECUTE WORLD_READ
  138. )
  139. # install conf
  140. install(FILES
  141. ${CMAKE_CURRENT_SOURCE_DIR}/conf/monitor.service
  142. DESTINATION ${PROJECT_NAME}
  143. PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
  144. GROUP_EXECUTE GROUP_READ
  145. WORLD_EXECUTE WORLD_READ
  146. )
  147. # install scripts
  148. install(FILES
  149. ${CMAKE_CURRENT_SOURCE_DIR}/scripts/run.sh
  150. ${CMAKE_CURRENT_SOURCE_DIR}/scripts/install.sh
  151. DESTINATION ${PROJECT_NAME}
  152. PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
  153. GROUP_EXECUTE GROUP_READ
  154. WORLD_EXECUTE WORLD_READ
  155. )
  156. # install third-party libraries
  157. install(FILES
  158. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib/libxml2.so
  159. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib/libxml2.so.16
  160. ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libxml2/lib/libxml2.so.16.2.0
  161. DESTINATION ${PROJECT_NAME}/lib
  162. )
  163. message(STATUS "install prefix: ${CMAKE_INSTALL_PREFIX}")