123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- cmake_minimum_required(VERSION 3.13)
- # set(PRODUCT_NAME VideoPlayer)
- #直接获取cmakelists.txt所在目录名 赋值给PRODUCT_NAME
- get_filename_component(PRODUCT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
- project(${PRODUCT_NAME})
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- set(CMAKE_AUTOUIC ON)
- #CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
- #CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
- #LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定
- #CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
- #CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录;
- #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)
- #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library)
- # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/win64)
- #set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
- if(UNIX)
- message("current platform: Linux ")
- set(CMAKE_PREFIX_PATH "/opt/Qt/Qt5.13.2")
- set(QT_QMAKE_EXECUTABLE "/opt/Qt/Qt5.13.2/bin/qmake")
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/linux)
- elseif(WIN32)
- message("current platform: Windows ")
- # #指定Qt安装目录
- # set(QT_DIR_ROOT
- # C:/Qt/Qt5.13.2/5.13.2
- # D:/Qt/Qt5.13.2/5.13.2)
-
- # if(CMAKE_CL_64) #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序
- # set(QT_DIR_NAME msvc2017_64)
- # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win64)
- # # set(CMAKE_PREFIX_PATH ${QT_DIR_ROOT}/msvc2017_64)
- # # list(APPEND CMAKE_PREFIX_PATH ${QT_DIR_ROOT}/msvc2017_64)
- # else()
- # set(QT_DIR_NAME msvc2017)
- # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win32)
- # endif()
- # foreach(item ${QT_DIR_ROOT})
- # set(QT_DIR_PATH ${item}/${QT_DIR_NAME})
- # message(STATUS "item is ${QT_DIR_PATH}")
- # if(EXISTS ${QT_DIR_PATH})
- # list(APPEND CMAKE_PREFIX_PATH ${QT_DIR_PATH})
- # endif()
- # endforeach()
- if(CMAKE_CL_64) #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序
- list(APPEND CMAKE_PREFIX_PATH C:/Qt/Qt5.13.2/5.13.2/msvc2017_64)
- list(APPEND CMAKE_PREFIX_PATH C:/Qt/6.7.3/msvc2019_64)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win64)
- else()
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/win32)
- list(APPEND CMAKE_PREFIX_PATH C:/Qt/Qt5.13.2/5.13.2/msvc2017)
- endif()
- else()
- message("current platform: unkonw ")
- endif()
- ##为每个模块提供*.cmake文件搜索路径
- #set(Qt5_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5")
- #set(Qt5Widgets_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Widgets")
- #set(Qt5Network_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5Network")
- #set(Qt5LinguistTools_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/Qt5LinguistTools")
- #然后查找
- #find_package(Qt5 COMPONENTS Widgets Network LinguistTools)
- #find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network REQUIRED)
- # find_package(Qt5 COMPONENTS Widgets Network WebSockets REQUIRED)
- # find_package(<库名> <版本号> EXACT COMPONENTS <组件名1> ... <组件名n> REQUIRED)
- find_package(Qt5 COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Network Concurrent)
- find_package(Qt6 COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Network Concurrent Core5Compat)
- # find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets Network Concurrent )
- message("Qt5_VERSION:"${Qt5_VERSION})
- message("Qt6_VERSION:"${Qt6_VERSION})
- set(FOUND_QT5 FALSE)
- set(FOUND_QT6 FALSE)
- ### 优先使用Qt6 ###
- if(DEFINED Qt6_VERSION AND NOT ${Qt6_VERSION} STREQUAL "")
- message(STATUS "found Qt6")
- set(FOUND_QT6 TRUE)
- else()
- message(STATUS "not found Qt6")
- endif()
- if(DEFINED Qt5_VERSION AND NOT ${Qt5_VERSION} STREQUAL "")
- message(STATUS "found Qt5")
- set(FOUND_QT5 TRUE)
- else()
- message(STATUS "not found Qt5")
- endif()
- # if(Qt5_VERSION VERSION_GREATER_EQUAL "5.12.0")
- # message(STATUS "Qt version is 5.12.0 or higher")
- # else()
- # message(FATAL_ERROR "Qt version is too low, need at least 5.12.0")
- # endif()
- if (NOT FOUND_QT5 AND NOT FOUND_QT6)
- message(FATAL_ERROR "\n!!!!! Qt5 or Qt6 not found!!!!!\n")
- endif()
- #CMAKE_ARCHIVE_OUTPUT_DIRECTORY:默认存放静态库的文件夹位置;
- #CMAKE_LIBRARY_OUTPUT_DIRECTORY:默认存放动态库的文件夹位置;
- #LIBRARY_OUTPUT_PATH:默认存放库文件的位置,如果产生的是静态库并且没有指定
- #CMAKE_ARCHIVE_OUTPUT_DIRECTORY 则存放在该目录下,动态库也类似;
- #CMAKE_RUNTIME_OUTPUT_DIRECTORY:存放可执行软件的目录;
- #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)
- #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/library)
- # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/win64)
- #set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/path)
- add_definitions(-DUNICODE)
- if(MSVC)
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
- endif()
- # set the include files
- set(PRO_CODE_INC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- ${CMAKE_CURRENT_SOURCE_DIR}/src/module
- ${CMAKE_CURRENT_SOURCE_DIR}/module/DragAbleWidget
- )
- include_directories(${PRO_CODE_INC})
- file(GLOB_RECURSE ALL_SOURCE
- ${CMAKE_CURRENT_SOURCE_DIR}/module/DragAbleWidget/*.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/src/Widget/*.cpp
- )
-
- if (FOUND_QT6)
- qt6_add_resources(qrc_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/resources.qrc)
- elseif (FOUND_QT5)
- qt5_add_resources(qrc_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/resources.qrc)
- endif()
- # message("ALL_SOURCE:"${ALL_SOURCE})
- add_executable(${PROJECT_NAME} ${ALL_SOURCE} ${qrc_FILES})
- # add_executable(${PROJECT_NAME} ${ALL_SOURCE})
- #### add videoplayer module ###
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/module/VideoPlayer)
- include_directories(${PRO_CODE_INC})
- if (WIN32)
- target_link_libraries(${PROJECT_NAME}
- WS2_32.lib AdvAPI32.lib winmm.lib User32.lib GDI32.lib Strmiids.lib)
- endif()
- if (FOUND_QT6)
- target_link_libraries(${PROJECT_NAME} Qt6::Core Qt6::Widgets Qt6::Network Qt6::Concurrent Qt6::OpenGL Qt6::OpenGLWidgets Qt6::Core5Compat)
- elseif (FOUND_QT5)
- target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Network Qt5::Concurrent)
- endif()
- # message(${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
- # #编译成功后,执行自定义命令
- # #拷贝有可能会升级的lib文件到system/lib
- # add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- # # COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/module/VideoPlayer/lib/ffmpeg/bin/win64/* ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
- # # COMMAND ${CMAKE_COMMAND} -E copy module/VideoPlayer/lib/ffmpeg/bin/win64/avcodec.lib bin/win64
- # COMMAND copy module/VideoPlayer/lib/ffmpeg/bin/win64/* bin/win64/
- # )
- # #编译成功后,执行自定义命令
- # #拷贝dll到bin目录下
- # add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- # COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/copy_dll.bat
- # )
|