CMakeLists.txt 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. cmake_minimum_required(VERSION 3.5)
  2. project(Library VERSION 1.1 LANGUAGES CXX)
  3. set(CMAKE_AUTOUIC ON)
  4. set(CMAKE_AUTOMOC ON)
  5. set(CMAKE_AUTORCC ON)
  6. set(CMAKE_CXX_STANDARD 17)
  7. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  8. #=========================================================
  9. #********************** Qt库的位置 *********************
  10. #=========================================================
  11. # message(STATUS "CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}")
  12. if(CMAKE_SYSTEM_NAME MATCHES Windows)
  13. elseif(CMAKE_SYSTEM_NAME MATCHES Linux)
  14. set(CMAKE_PREFIX_PATH "/home/Apple/Qt/Qt5.12.12/5.12.12/gcc_64")
  15. endif()
  16. #=========================================================
  17. #************** 指定可执行文件名称和位置 *****************
  18. #=========================================================
  19. #设置可执行文件名称
  20. set(exec_name "Library")
  21. #包含子文件夹
  22. #include(${CMAKE_SOURCE_DIR}/CommonModule/common.cmake)
  23. #设置可执行文件和库的输出位置
  24. if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
  25. message(STATUS "Using ${CMAKE_CXX_COMPILER_ID} Compiler")
  26. #设置可执行文件输出位置
  27. set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU)
  28. #设置库生成位置
  29. set(LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU)
  30. if(CMAKE_BUILD_TYPE MATCHES Debug)
  31. message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
  32. else()
  33. message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
  34. endif()
  35. elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
  36. message(STATUS "Using ${CMAKE_CXX_COMPILER_ID} Compiler")
  37. # string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus /MP")
  38. #设置可执行文件输出位置
  39. set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/../bin_MSVC)
  40. set(LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_MSVC)
  41. if(CMAKE_BUILD_TYPE MATCHES Debug)
  42. message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
  43. else()
  44. message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
  45. endif()
  46. #设置MSVC使用UTF-8
  47. add_compile_options(
  48. "$<$<CXX_COMPILER_ID:MSVC>:/utf-8>"
  49. # "$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>"
  50. # "$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>"
  51. )
  52. #消除MSVC对SPDLOG的兼容性警告
  53. add_compile_definitions("_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING")
  54. endif()
  55. #指定库的位置,方便寻找
  56. link_directories(${LIB_PATH})
  57. #=========================================================
  58. #******************* 定义一些参数变量 *******************
  59. #=========================================================
  60. #定义一些宏
  61. if(CMAKE_BUILD_TYPE MATCHES Debug)
  62. add_compile_definitions(C_DEBUG)
  63. elseif(CMAKE_BUILD_TYPE MATCHES Release)
  64. add_compile_definitions(C_RELEASE)
  65. endif()
  66. if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
  67. add_compile_definitions(MSVC)
  68. elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
  69. add_compile_definitions(GNU)
  70. endif()
  71. #需要定义这个宏,才会使用编译好的动态库
  72. add_compile_definitions(SPDLOG_COMPILED_LIB)
  73. #给spdlog添加宏定义,使其支持%#等源文件相关的标志
  74. add_compile_definitions(SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)
  75. #=========================================================
  76. #********************* 搜索添加包 **********************
  77. #=========================================================
  78. find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
  79. find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
  80. find_package(Qt5 COMPONENTS
  81. Widgets
  82. Core
  83. # SerialPort
  84. Network
  85. # Multimedia
  86. Sql
  87. REQUIRED
  88. )
  89. #指定库的搜索路径,主要是 .cmake文件的位置
  90. if(CMAKE_SYSTEM_NAME MATCHES Windows)
  91. message(STATUS "Using ${CMAKE_SYSTEM_NAME} System")
  92. list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/Libraries/qmqtt)
  93. if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
  94. set(fmt_DIR ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/lib/cmake/fmt)
  95. set(spdlog_DIR ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/lib/cmake/spdlog)
  96. set(freetype_DIR ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/lib/cmake/freetype)
  97. elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
  98. set(fmt_DIR ${CMAKE_SOURCE_DIR}/Libraries/msvc2022/lib/cmake/fmt)
  99. set(spdlog_DIR ${CMAKE_SOURCE_DIR}/Libraries/msvc2022/lib/cmake/spdlog)
  100. set(freetype_DIR ${CMAKE_SOURCE_DIR}/Libraries/msvc2022/lib/cmake/freetype)
  101. endif()
  102. elseif(CMAKE_SYSTEM_NAME MATCHES Linux)
  103. message(STATUS "Using ${CMAKE_SYSTEM_NAME} System")
  104. set(fmt_DIR ${CMAKE_SOURCE_DIR}/Libraries/deepin/lib/cmake/fmt)
  105. set(spdlog_DIR ${CMAKE_SOURCE_DIR}/Libraries/deepin/lib/cmake/spdlog)
  106. set(freetype_DIR ${CMAKE_SOURCE_DIR}/Libraries/deepin/lib/cmake/freetype)
  107. endif()
  108. find_package(fmt REQUIRED)
  109. find_package(spdlog REQUIRED)
  110. #在Windows中可能有冲突的地方,直接指明路径
  111. # find_package(Freetype REQUIRED PATHS ${freetype_DIR})
  112. find_package(qmqtt REQUIRED)
  113. #打印搜索到的信息
  114. message(STATUS "fmt Found: ${fmt_FOUND}")
  115. message(STATUS "fmt Version: ${fmt_VERSION}")
  116. message(STATUS "spdlog FOUND: ${spdlog_FOUND}")
  117. message(STATUS "spdlog Version: ${spdlog_VERSION}")
  118. # message(STATUS "FreeType Found : ${Freetype_FOUND}")
  119. # message(STATUS "FreeType Version : ${Freetype_VERSION}")
  120. message(STATUS "qmqtt Found : ${qmqtt_FOUND}")
  121. message(STATUS "qmqtt Version : ${qmqtt_VERSION}")
  122. message(STATUS "qmqtt_INCLUDE_DIR : ${qmqtt_INCLUDE_DIR}")
  123. message(STATUS "qmqtt_LIBRARY : ${qmqtt_LIBRARY}")
  124. #=========================================================
  125. #**************** 搜索添加头文件和源文件 *****************
  126. #=========================================================
  127. #包含头文件
  128. include_directories(
  129. ${CMAKE_SOURCE_DIR}
  130. ${CMAKE_SOURCE_DIR}/common/Logs
  131. )
  132. #包含源文件
  133. file(GLOB SRC
  134. ${CMAKE_SOURCE_DIR}/*.cpp
  135. ${CMAKE_SOURCE_DIR}/common/Logs/*.cpp
  136. )
  137. #=========================================================
  138. #******************** 生成可执行程序 ********************
  139. #=========================================================
  140. #这里添加WIN32可以消除release模式下的cmd窗口
  141. if(CMAKE_BUILD_TYPE MATCHES Debug)
  142. add_executable(${exec_name}
  143. # WIN32
  144. ${SRC}
  145. )
  146. elseif(CMAKE_BUILD_TYPE MATCHES Release)
  147. add_executable(${exec_name}
  148. # WIN32
  149. ${SRC}
  150. )
  151. endif()
  152. target_include_directories(${exec_name} PRIVATE
  153. ${qmqtt_INCLUDE_DIR}
  154. )
  155. target_link_libraries(${exec_name} PRIVATE
  156. Qt5::Widgets
  157. Qt5::Core
  158. # Qt5::SerialPort
  159. Qt5::Network
  160. # Qt5::Multimedia
  161. Qt5::Sql
  162. )
  163. target_link_libraries(${exec_name} PRIVATE
  164. # Freetype::Freetype
  165. fmt::fmt
  166. spdlog::spdlog
  167. ${qmqtt_LIBRARY}
  168. )
  169. #target_link_libraries(${exec_name} PRIVATE ${FT2_Name})
  170. if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
  171. target_link_libraries(${exec_name} PRIVATE
  172. # debug ${qmqtt_LIBRARY}
  173. # optimized ${qmqtt_LIBRARY}
  174. )
  175. elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
  176. target_link_libraries(${exec_name} PRIVATE
  177. # debug ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/bin/Qt5Qmqtt.dll
  178. # optimized ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/bin/Qt5Qmqtt.dll
  179. )
  180. endif()