CMakeLists.txt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. cmake_minimum_required(VERSION 3.13)
  2. # set(PRODUCT_NAME VideoPlayer)
  3. #直接获取cmakelists.txt所在目录名 赋值给PRODUCT_NAME
  4. get_filename_component(PRODUCT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
  5. project(${PRODUCT_NAME})
  6. set(CMAKE_CXX_STANDARD 11)
  7. set(CMAKE_AUTOMOC ON)
  8. set(CMAKE_AUTORCC ON)
  9. set(CMAKE_AUTOUIC ON)
  10. #CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
  11. #CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
  12. #LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定
  13. #CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
  14. #CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录;
  15. #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)
  16. #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library)
  17. # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/win64)
  18. #set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
  19. if(UNIX)
  20. message("current platform: Linux ")
  21. set(CMAKE_PREFIX_PATH "/opt/Qt/Qt5.13.2")
  22. set(QT_QMAKE_EXECUTABLE "/opt/Qt/Qt5.13.2/bin/qmake")
  23. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/linux)
  24. elseif(WIN32)
  25. message("current platform: Windows ")
  26. # #指定Qt安装目录
  27. # set(QT_DIR_ROOT
  28. # C:/Qt/Qt5.13.2/5.13.2
  29. # D:/Qt/Qt5.13.2/5.13.2)
  30. # if(CMAKE_CL_64) #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序
  31. # set(QT_DIR_NAME msvc2017_64)
  32. # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win64)
  33. # # set(CMAKE_PREFIX_PATH ${QT_DIR_ROOT}/msvc2017_64)
  34. # # list(APPEND CMAKE_PREFIX_PATH ${QT_DIR_ROOT}/msvc2017_64)
  35. # else()
  36. # set(QT_DIR_NAME msvc2017)
  37. # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win32)
  38. # endif()
  39. # foreach(item ${QT_DIR_ROOT})
  40. # set(QT_DIR_PATH ${item}/${QT_DIR_NAME})
  41. # message(STATUS "item is ${QT_DIR_PATH}")
  42. # if(EXISTS ${QT_DIR_PATH})
  43. # list(APPEND CMAKE_PREFIX_PATH ${QT_DIR_PATH})
  44. # endif()
  45. # endforeach()
  46. if(CMAKE_CL_64) #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序
  47. list(APPEND CMAKE_PREFIX_PATH C:/Qt/Qt5.13.2/5.13.2/msvc2017_64)
  48. list(APPEND CMAKE_PREFIX_PATH C:/Qt/6.7.3/msvc2019_64)
  49. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win64)
  50. else()
  51. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win32)
  52. list(APPEND CMAKE_PREFIX_PATH C:/Qt/Qt5.13.2/5.13.2/msvc2017)
  53. endif()
  54. else()
  55. message("current platform: unkonw ")
  56. endif()
  57. ##为每个模块提供*.cmake文件搜索路径
  58. #set(Qt5_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5")
  59. #set(Qt5Widgets_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Widgets")
  60. #set(Qt5Network_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Network")
  61. #set(Qt5LinguistTools_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5LinguistTools")
  62. #然后查找
  63. #find_package(Qt5 COMPONENTS Widgets Network LinguistTools)
  64. #find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network REQUIRED)
  65. # find_package(Qt5 COMPONENTS Widgets Network WebSockets REQUIRED)
  66. # find_package(<库名> <版本号> EXACT COMPONENTS <组件名1> ... <组件名n> REQUIRED)
  67. find_package(Qt5 COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Network Concurrent)
  68. find_package(Qt6 COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Network Concurrent Core5Compat)
  69. # find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Network Concurrent )
  70. message("Qt5_VERSION:"${Qt5_VERSION})
  71. message("Qt6_VERSION:"${Qt6_VERSION})
  72. set(FOUND_QT5 FALSE)
  73. set(FOUND_QT6 FALSE)
  74. ### 优先使用Qt6 ###
  75. if(DEFINED Qt6_VERSION AND NOT ${Qt6_VERSION} STREQUAL "")
  76. message(STATUS "found Qt6")
  77. set(FOUND_QT6 TRUE)
  78. else()
  79. message(STATUS "not found Qt6")
  80. endif()
  81. if(DEFINED Qt5_VERSION AND NOT ${Qt5_VERSION} STREQUAL "")
  82. message(STATUS "found Qt5")
  83. set(FOUND_QT5 TRUE)
  84. else()
  85. message(STATUS "not found Qt5")
  86. endif()
  87. # if(Qt5_VERSION VERSION_GREATER_EQUAL "5.12.0")
  88. # message(STATUS "Qt version is 5.12.0 or higher")
  89. # else()
  90. # message(FATAL_ERROR "Qt version is too low, need at least 5.12.0")
  91. # endif()
  92. if (NOT FOUND_QT5 AND NOT FOUND_QT6)
  93. message(FATAL_ERROR "\n!!!!! Qt5 or Qt6 not found!!!!!\n")
  94. endif()
  95. #CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
  96. #CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
  97. #LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定
  98. #CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
  99. #CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录;
  100. #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)
  101. #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library)
  102. # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/win64)
  103. #set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
  104. add_definitions(-DUNICODE)
  105. if(MSVC)
  106. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
  107. endif()
  108. # set the include files
  109. set(PRO_CODE_INC
  110. ${CMAKE_CURRENT_SOURCE_DIR}/src
  111. ${CMAKE_CURRENT_SOURCE_DIR}/src/module
  112. ${CMAKE_CURRENT_SOURCE_DIR}/module/DragAbleWidget
  113. )
  114. include_directories(${PRO_CODE_INC})
  115. file(GLOB_RECURSE ALL_SOURCE
  116. ${CMAKE_CURRENT_SOURCE_DIR}/module/DragAbleWidget/*.cpp
  117. ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c
  118. ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
  119. ${CMAKE_CURRENT_SOURCE_DIR}/src/Widget/*.cpp
  120. )
  121. if (FOUND_QT6)
  122. qt6_add_resources(qrc_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/resources.qrc)
  123. elseif (FOUND_QT5)
  124. qt5_add_resources(qrc_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/resources.qrc)
  125. endif()
  126. # message("ALL_SOURCE:"${ALL_SOURCE})
  127. add_executable(${PROJECT_NAME} ${ALL_SOURCE} ${qrc_FILES})
  128. # add_executable(${PROJECT_NAME} ${ALL_SOURCE})
  129. #### add videoplayer module ###
  130. add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/module/VideoPlayer)
  131. include_directories(${PRO_CODE_INC})
  132. if (WIN32)
  133. target_link_libraries(${PROJECT_NAME}
  134. WS2_32.lib AdvAPI32.lib winmm.lib User32.lib GDI32.lib Strmiids.lib)
  135. endif()
  136. if (FOUND_QT6)
  137. target_link_libraries(${PROJECT_NAME} Qt6::Core Qt6::Widgets Qt6::Network Qt6::Concurrent Qt6::OpenGL Qt6::OpenGLWidgets Qt6::Core5Compat)
  138. elseif (FOUND_QT5)
  139. target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Network Qt5::Concurrent)
  140. endif()
  141. # message(${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
  142. # #编译成功后,执行自定义命令
  143. # #拷贝有可能会升级的lib文件到system/lib
  144. # add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  145. # # COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/module/VideoPlayer/lib/ffmpeg/bin/win64/* ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
  146. # # COMMAND ${CMAKE_COMMAND} -E copy module/VideoPlayer/lib/ffmpeg/bin/win64/avcodec.lib bin/win64
  147. # COMMAND copy module/VideoPlayer/lib/ffmpeg/bin/win64/* bin/win64/
  148. # )
  149. # #编译成功后,执行自定义命令
  150. # #拷贝dll到bin目录下
  151. # add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  152. # COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/copy_dll.bat
  153. # )