|
|
|
|
@ -1,309 +1,434 @@
|
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
# For VS2019 and Xcode 12+ support.
|
|
|
|
|
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Global config
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# QC is "Qt CMake"
|
|
|
|
|
# https://www.kdab.com/wp-content/uploads/stories/QTVTC20-Using-Modern-CMake-Kevin-Funk.pdf
|
|
|
|
|
|
|
|
|
|
# QC Custom config
|
|
|
|
|
set(QC_PROJECT_NAME "QtScrcpy")
|
|
|
|
|
# Read version numbers from file
|
|
|
|
|
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/version QC_FILE_VERSION)
|
|
|
|
|
set(QC_PROJECT_VERSION ${QC_FILE_VERSION})
|
|
|
|
|
|
|
|
|
|
# Project declare
|
|
|
|
|
project(${QC_PROJECT_NAME} VERSION ${QC_PROJECT_VERSION} LANGUAGES CXX)
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] Project ${PROJECT_NAME} ${PROJECT_VERSION}")
|
|
|
|
|
|
|
|
|
|
# QC define
|
|
|
|
|
|
|
|
|
|
# check arch
|
|
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
|
|
|
set(QC_CPU_ARCH x64)
|
|
|
|
|
else()
|
|
|
|
|
set(QC_CPU_ARCH x86)
|
|
|
|
|
endif()
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] CPU_ARCH:${QC_CPU_ARCH}")
|
|
|
|
|
|
|
|
|
|
# CMake set
|
|
|
|
|
#set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network LinguistTools REQUIRED)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network LinguistTools REQUIRED)
|
|
|
|
|
# default RelWithDebInfo
|
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo)
|
|
|
|
|
endif()
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] BUILD_TYPE:${CMAKE_BUILD_TYPE}")
|
|
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
|
# Compiler set
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] C++ compiler ID is: ${CMAKE_CXX_COMPILER_ID}")
|
|
|
|
|
if (MSVC)
|
|
|
|
|
# FFmpeg cannot be compiled natively by MSVC version < 12.0 (2013)
|
|
|
|
|
if(MSVC_VERSION LESS 1800)
|
|
|
|
|
message(FATAL_ERROR "[QtScrcpy] FATAL ERROR: MSVC version is older than 12.0 (2013).")
|
|
|
|
|
message(FATAL_ERROR "[${PROJECT_NAME}] ERROR: MSVC version is older than 12.0 (2013).")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
|
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] Set Warnings as error")
|
|
|
|
|
# warning level 3 and all warnings as errors
|
|
|
|
|
add_compile_options(/W3 /WX /wd4566)
|
|
|
|
|
|
|
|
|
|
# avoid warning C4819
|
|
|
|
|
add_compile_options(-source-charset:utf-8)
|
|
|
|
|
#add_compile_options(/utf-8)
|
|
|
|
|
|
|
|
|
|
# ensure we use minimal "windows.h" lib without the crazy min max macros
|
|
|
|
|
add_compile_definitions(NOMINMAX WIN32_LEAN_AND_MEAN)
|
|
|
|
|
|
|
|
|
|
# disable SAFESEH - avoid "LNK2026: module unsafe"(Qt5.15&&vs2019)
|
|
|
|
|
add_link_options(/SAFESEH:NO)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if (NOT MSVC)
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] Set warnings as error")
|
|
|
|
|
# lots of warnings and all warnings as errors
|
|
|
|
|
add_compile_options(-Wall -Wextra -pedantic -Werror)
|
|
|
|
|
|
|
|
|
|
# ==================== macOS ====================
|
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
|
# QS_MAC_RESOURCES: esource file list stored in Contents/MacOS
|
|
|
|
|
file(GLOB QS_MAC_RESOURCES "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/*.dylib")
|
|
|
|
|
list(APPEND QS_MAC_RESOURCES
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/third_party/scrcpy-server"
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/adb/mac/adb"
|
|
|
|
|
)
|
|
|
|
|
# disable some warning
|
|
|
|
|
add_compile_options(-Wno-nested-anon-types -Wno-c++17-extensions)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Qt
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# QS_MAC_CONFIG: Config file stored in Contents/MacOS/config
|
|
|
|
|
set(QS_MAC_CONFIG "${PROJECT_SOURCE_DIR}/config/config.ini")
|
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network LinguistTools REQUIRED)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network LinguistTools REQUIRED)
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 COMPONENTS X11Extras REQUIRED)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS X11Extras REQUIRED)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(QS_TS_FILES
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/zh_CN.ts
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/en_US.ts
|
|
|
|
|
message(STATUS "[${PROJECT_NAME}] Qt version is: ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}")
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Sources
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# adb
|
|
|
|
|
set(QC_ADB_SOURCES
|
|
|
|
|
adb/adbprocess.h
|
|
|
|
|
adb/adbprocess.cpp
|
|
|
|
|
)
|
|
|
|
|
source_group(adb FILES ${QC_ADB_SOURCES})
|
|
|
|
|
|
|
|
|
|
# common
|
|
|
|
|
set(QC_COMMON_SOURCES
|
|
|
|
|
common/qscrcpyevent.h
|
|
|
|
|
)
|
|
|
|
|
source_group(common FILES ${QC_COMMON_SOURCES})
|
|
|
|
|
|
|
|
|
|
# device
|
|
|
|
|
set(QC_DEVICE_SOURCES
|
|
|
|
|
device/device.h
|
|
|
|
|
device/device.cpp
|
|
|
|
|
device/android/input.h
|
|
|
|
|
device/android/keycodes.h
|
|
|
|
|
device/controller/controller.h
|
|
|
|
|
device/controller/controller.cpp
|
|
|
|
|
device/controller/inputconvert/inputconvertbase.h
|
|
|
|
|
device/controller/inputconvert/inputconvertbase.cpp
|
|
|
|
|
device/controller/inputconvert/inputconvertnormal.h
|
|
|
|
|
device/controller/inputconvert/inputconvertnormal.cpp
|
|
|
|
|
device/controller/inputconvert/inputconvertgame.h
|
|
|
|
|
device/controller/inputconvert/inputconvertgame.cpp
|
|
|
|
|
device/controller/inputconvert/controlmsg.h
|
|
|
|
|
device/controller/inputconvert/controlmsg.cpp
|
|
|
|
|
device/controller/inputconvert/keymap/keymap.h
|
|
|
|
|
device/controller/inputconvert/keymap/keymap.cpp
|
|
|
|
|
device/controller/receiver/devicemsg.h
|
|
|
|
|
device/controller/receiver/devicemsg.cpp
|
|
|
|
|
device/controller/receiver/receiver.h
|
|
|
|
|
device/controller/receiver/receiver.cpp
|
|
|
|
|
device/decoder/avframeconvert.h
|
|
|
|
|
device/decoder/avframeconvert.cpp
|
|
|
|
|
device/decoder/decoder.h
|
|
|
|
|
device/decoder/decoder.cpp
|
|
|
|
|
device/decoder/fpscounter.h
|
|
|
|
|
device/decoder/fpscounter.cpp
|
|
|
|
|
device/decoder/videobuffer.h
|
|
|
|
|
device/decoder/videobuffer.cpp
|
|
|
|
|
device/filehandler/filehandler.h
|
|
|
|
|
device/filehandler/filehandler.cpp
|
|
|
|
|
device/recorder/recorder.h
|
|
|
|
|
device/recorder/recorder.cpp
|
|
|
|
|
device/render/qyuvopenglwidget.h
|
|
|
|
|
device/render/qyuvopenglwidget.cpp
|
|
|
|
|
device/server/server.h
|
|
|
|
|
device/server/server.cpp
|
|
|
|
|
device/server/tcpserver.h
|
|
|
|
|
device/server/tcpserver.cpp
|
|
|
|
|
device/server/videosocket.h
|
|
|
|
|
device/server/videosocket.cpp
|
|
|
|
|
device/stream/stream.h
|
|
|
|
|
device/stream/stream.cpp
|
|
|
|
|
device/ui/toolform.h
|
|
|
|
|
device/ui/toolform.cpp
|
|
|
|
|
device/ui/toolform.ui
|
|
|
|
|
device/ui/videoform.h
|
|
|
|
|
device/ui/videoform.cpp
|
|
|
|
|
device/ui/videoform.ui
|
|
|
|
|
)
|
|
|
|
|
source_group(device FILES ${QC_DEVICE_SOURCES})
|
|
|
|
|
|
|
|
|
|
# devicemanage
|
|
|
|
|
set(QC_DEVICEMANAGE_SOURCES
|
|
|
|
|
devicemanage/devicemanage.h
|
|
|
|
|
devicemanage/devicemanage.cpp
|
|
|
|
|
)
|
|
|
|
|
source_group(devicemanage FILES ${QC_DEVICEMANAGE_SOURCES})
|
|
|
|
|
|
|
|
|
|
# fontawesome
|
|
|
|
|
set(QC_FONTAWESOME_SOURCES
|
|
|
|
|
fontawesome/iconhelper.h
|
|
|
|
|
fontawesome/iconhelper.cpp
|
|
|
|
|
)
|
|
|
|
|
source_group(fontawesome FILES ${QC_FONTAWESOME_SOURCES})
|
|
|
|
|
|
|
|
|
|
# uibase
|
|
|
|
|
set(QC_UIBASE_SOURCES
|
|
|
|
|
uibase/keepratiowidget.h
|
|
|
|
|
uibase/keepratiowidget.cpp
|
|
|
|
|
uibase/magneticwidget.h
|
|
|
|
|
uibase/magneticwidget.cpp
|
|
|
|
|
)
|
|
|
|
|
source_group(uibase FILES ${QC_UIBASE_SOURCES})
|
|
|
|
|
|
|
|
|
|
# util
|
|
|
|
|
set(QC_UTIL_SOURCES
|
|
|
|
|
util/compat.h
|
|
|
|
|
util/config.h
|
|
|
|
|
util/config.cpp
|
|
|
|
|
util/bufferutil.h
|
|
|
|
|
util/bufferutil.cpp
|
|
|
|
|
util/mousetap/mousetap.h
|
|
|
|
|
util/mousetap/mousetap.cpp
|
|
|
|
|
)
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
|
|
set(QC_UTIL_SOURCES ${QC_UTIL_SOURCES}
|
|
|
|
|
util/mousetap/winmousetap.h
|
|
|
|
|
util/mousetap/winmousetap.cpp
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
|
|
|
set(QC_UTIL_SOURCES ${QC_UTIL_SOURCES}
|
|
|
|
|
util/mousetap/xmousetap.h
|
|
|
|
|
util/mousetap/xmousetap.cpp
|
|
|
|
|
)
|
|
|
|
|
set_source_files_properties(${QS_TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n")
|
|
|
|
|
endif()
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
|
|
|
set(QC_UTIL_SOURCES ${QC_UTIL_SOURCES}
|
|
|
|
|
util/mousetap/cocoamousetap.h
|
|
|
|
|
util/mousetap/cocoamousetap.mm
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
source_group(util FILES ${QC_UTIL_SOURCES})
|
|
|
|
|
|
|
|
|
|
set(QS_SOURCES_MAIN
|
|
|
|
|
# qrc
|
|
|
|
|
set(QC_QRC_SOURCES "res/res.qrc")
|
|
|
|
|
|
|
|
|
|
# main
|
|
|
|
|
set(QC_MAIN_SOURCES
|
|
|
|
|
main.cpp
|
|
|
|
|
dialog.cpp
|
|
|
|
|
dialog.h
|
|
|
|
|
dialog.ui
|
|
|
|
|
${QS_TS_FILES}
|
|
|
|
|
${QC_QRC_SOURCES}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
set(QS_QRC_MAIN "${CMAKE_CURRENT_SOURCE_DIR}/res/res.qrc")
|
|
|
|
|
|
|
|
|
|
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) # Qt version 6
|
|
|
|
|
qt_create_translation(QS_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${QS_TS_FILES})
|
|
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
|
qt_add_executable(${CMAKE_PROJECT_NAME} WIN32 MANUAL_FINALIZATION
|
|
|
|
|
main.cpp
|
|
|
|
|
${QS_SOURCES_MAIN}
|
|
|
|
|
${QS_QRC_MAIN}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
elseif(UNIX)
|
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
|
qt_add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE MANUAL_FINALIZATION
|
|
|
|
|
main.cpp
|
|
|
|
|
${QS_SOURCES_MAIN}
|
|
|
|
|
${QS_MAC_RESOURCES}
|
|
|
|
|
${QS_MAC_CONFIG}
|
|
|
|
|
${QS_QRC_MAIN}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
else()
|
|
|
|
|
qt_add_executable(${CMAKE_PROJECT_NAME} MANUAL_FINALIZATION
|
|
|
|
|
main.cpp
|
|
|
|
|
${QS_SOURCES_MAIN}
|
|
|
|
|
${QS_QRC_MAIN}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
# plantform file
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
|
|
# Define VERSION macros for .rc file
|
|
|
|
|
add_compile_definitions(
|
|
|
|
|
VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
|
|
|
|
|
VERSION_MINOR=${PROJECT_VERSION_MINOR}
|
|
|
|
|
VERSION_PATCH=${PROJECT_VERSION_PATCH}
|
|
|
|
|
VERSION_RC_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
|
|
|
|
|
)
|
|
|
|
|
set(QC_PLANTFORM_SOURCES
|
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/res/${PROJECT_NAME}.rc"
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
|
|
|
# Step 1. add icns to source file, for MACOSX_PACKAGE_LOCATION copy
|
|
|
|
|
set(QC_PLANTFORM_SOURCES
|
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/res/${PROJECT_NAME}.icns"
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
else() # Qt version 5
|
|
|
|
|
qt5_create_translation(QS_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${QS_TS_FILES})
|
|
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
|
add_executable(${CMAKE_PROJECT_NAME} WIN32
|
|
|
|
|
main.cpp
|
|
|
|
|
${QS_SOURCES_MAIN}
|
|
|
|
|
${QS_QRC_MAIN}
|
|
|
|
|
)
|
|
|
|
|
elseif(UNIX)
|
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
|
add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE
|
|
|
|
|
main.cpp
|
|
|
|
|
${QS_SOURCES_MAIN}
|
|
|
|
|
${QS_MAC_RESOURCES}
|
|
|
|
|
${QS_MAC_CONFIG}
|
|
|
|
|
${QS_QRC_MAIN}
|
|
|
|
|
)
|
|
|
|
|
else()
|
|
|
|
|
add_executable(${CMAKE_PROJECT_NAME}
|
|
|
|
|
main.cpp
|
|
|
|
|
${QS_SOURCES_MAIN}
|
|
|
|
|
${QS_QRC_MAIN}
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
# 使用qt5_add_translation 根据已有ts文件生成qm文件,不用qt5_create_translation
|
|
|
|
|
# 感兴趣可以了解下qt5_create_translation用法 https://www.cnblogs.com/apocelipes/p/14355460.html
|
|
|
|
|
set(QC_TS_FILES
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/zh_CN.ts
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/en_US.ts
|
|
|
|
|
)
|
|
|
|
|
set_source_files_properties(${QC_TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n")
|
|
|
|
|
qt5_add_translation(QC_QM_FILES ${QC_TS_FILES})
|
|
|
|
|
|
|
|
|
|
# all sources
|
|
|
|
|
set(QC_PROJECT_SOURCES
|
|
|
|
|
${QC_ADB_SOURCES}
|
|
|
|
|
${QC_COMMON_SOURCES}
|
|
|
|
|
${QC_DEVICE_SOURCES}
|
|
|
|
|
${QC_DEVICEMANAGE_SOURCES}
|
|
|
|
|
${QC_FONTAWESOME_SOURCES}
|
|
|
|
|
${QC_UIBASE_SOURCES}
|
|
|
|
|
${QC_UTIL_SOURCES}
|
|
|
|
|
${QC_MAIN_SOURCES}
|
|
|
|
|
${QC_PLANTFORM_SOURCES}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
|
|
|
set(QC_RUNTIME_TYPE MACOSX_BUNDLE)
|
|
|
|
|
endif()
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
|
|
set(QC_RUNTIME_TYPE WIN32)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# ******************** Microsoft Windows ********************
|
|
|
|
|
if(WIN32)
|
|
|
|
|
message(STATUS "[QtScrcpy] Make for Microsoft Windows.")
|
|
|
|
|
|
|
|
|
|
# 通过rc的方式的话,VERSION变量rc中获取不到,定义为宏方便rc中使用
|
|
|
|
|
# Define macros for .rc file
|
|
|
|
|
add_compile_definitions(
|
|
|
|
|
VERSION_MAJOR=${VERSION_MAJOR}
|
|
|
|
|
VERSION_MINOR=${VERSION_MINOR}
|
|
|
|
|
VERSION_PATCH=${VERSION_PATCH}
|
|
|
|
|
VERSION_RC_STR=\\\"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}\\\"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8) # Compiler is 64-bit
|
|
|
|
|
message(STATUS "[QtScrcpy] 64-bit compiler detected.")
|
|
|
|
|
|
|
|
|
|
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x64")
|
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
|
message(STATUS "[QtScrcpy] In debug mode.")
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/debug"
|
|
|
|
|
)
|
|
|
|
|
else()
|
|
|
|
|
message(STATUS "[QtScrcpy] In release mode.")
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/release")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x64")
|
|
|
|
|
|
|
|
|
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) # Compiler is 32-bit
|
|
|
|
|
message(STATUS "[QtScrcpy] 32-bit compiler detected.")
|
|
|
|
|
|
|
|
|
|
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x86")
|
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
|
message(STATUS "[QtScrcpy] In debug mode.")
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/debug")
|
|
|
|
|
else()
|
|
|
|
|
message(STATUS "[QtScrcpy] In release mode.")
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/release")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x86")
|
|
|
|
|
endif()
|
|
|
|
|
add_executable(${PROJECT_NAME} ${QC_RUNTIME_TYPE} ${QC_PROJECT_SOURCES})
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Internal include path (todo: remove this, use absolute path include)
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE adb)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE common)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/filehandler)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/android)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/decoder)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/controller)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/controller/receiver)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/controller/inputconvert)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/controller/inputconvert/keymap)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/server)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/stream)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/render)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/ui)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE device/recorder)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE devicemanage)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE fontawesome)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE util)
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE uibase)
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# common deps
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Qt
|
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Widgets
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Network
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# 构建完成后复制DLL依赖库
|
|
|
|
|
# Copy DLL dependencies after building
|
|
|
|
|
get_target_property(QS_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
|
|
|
|
|
file(GLOB QS_DLL_FILES "${QS_DLL_PATH}/*.dll")
|
|
|
|
|
foreach(QS_DLL_FILE ${QS_DLL_FILES})
|
|
|
|
|
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND
|
|
|
|
|
${CMAKE_COMMAND} -E copy_if_different
|
|
|
|
|
"${QS_DLL_FILE}" "${QS_RUNTIME_OUTPUT_DIRECTORY}"
|
|
|
|
|
)
|
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
|
message(STATUS "[QtScrcpy] Microsoft Visual C++ is used.")
|
|
|
|
|
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
|
|
|
|
|
set(QS_EXTERNAL_LIBS_FFMPEG
|
|
|
|
|
avformat
|
|
|
|
|
avcodec
|
|
|
|
|
avutil
|
|
|
|
|
swscale
|
|
|
|
|
)
|
|
|
|
|
# If MinGW is used, it is not appropriate to link static MSVC libs.
|
|
|
|
|
# Instead, we link DLLs directly
|
|
|
|
|
elseif(MINGW)
|
|
|
|
|
message(STATUS "[QtScrcpy] MinGW GCC is used.")
|
|
|
|
|
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
|
|
|
|
|
"-static"
|
|
|
|
|
${QS_DLL_FILES}
|
|
|
|
|
"-Wl,--enable-stdcall-fixup"
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
# output dir
|
|
|
|
|
# https://cmake.org/cmake/help/latest/prop_gbl/GENERATOR_IS_MULTI_CONFIG.html
|
|
|
|
|
get_property(QC_IS_MUTIL_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
|
|
|
message(STATUS "multi config:" QC_IS_MUTIL_CONFIG)
|
|
|
|
|
|
|
|
|
|
# $<0:> 使用生成器表达式为每个config设置RUNTIME_OUTPUT_DIRECTORY,这样multi config就不会自动追加CMAKE_BUILD_TYPE子目录了
|
|
|
|
|
# 1. multi config介绍 https://cmake.org/cmake/help/latest/prop_gbl/GENERATOR_IS_MULTI_CONFIG.html
|
|
|
|
|
# 2. multi config在不用表达式生成器时自动追加子目录说明 https://cmake.org/cmake/help/latest/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.html
|
|
|
|
|
# 3. 使用表达式生成器禁止multi config自动追加子目录解决方案 https://stackoverflow.com/questions/7747857/in-cmake-how-do-i-work-around-the-debug-and-release-directories-visual-studio-2
|
|
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../output/${QC_CPU_ARCH}/${CMAKE_BUILD_TYPE}/$<0:>"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
set(RC_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/QtScrcpy.rc")
|
|
|
|
|
|
|
|
|
|
# ******************** Unix-like OSs ********************
|
|
|
|
|
elseif(UNIX)
|
|
|
|
|
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib")
|
|
|
|
|
|
|
|
|
|
# ==================== macOS ====================
|
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
|
|
|
message(STATUS "[QtScrcpy] Make for macOS.")
|
|
|
|
|
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
|
|
|
|
|
|
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/debug")
|
|
|
|
|
else()
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/release")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Icon file stored in Contents/Resources
|
|
|
|
|
set(QS_MAC_ICON_NAME "QtScrcpy.icns")
|
|
|
|
|
set(QS_MAC_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/${QS_MAC_ICON_NAME}")
|
|
|
|
|
|
|
|
|
|
set_source_files_properties(${QS_MAC_RESOURCES} PROPERTIES
|
|
|
|
|
MACOSX_PACKAGE_LOCATION "MacOS"
|
|
|
|
|
)
|
|
|
|
|
set_source_files_properties(${QS_MAC_CONFIG} PROPERTIES
|
|
|
|
|
MACOSX_PACKAGE_LOCATION "MacOS/config"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
set(QS_EXTERNAL_LIBS_FFMPEG
|
|
|
|
|
avformat.58
|
|
|
|
|
avcodec.58
|
|
|
|
|
avutil.56
|
|
|
|
|
swscale.5
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
# The base plist template file
|
|
|
|
|
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist"
|
|
|
|
|
# The elements to be overwritten
|
|
|
|
|
MACOSX_BUNDLE_ICON_FILE "${QS_MAC_ICON_NAME}"
|
|
|
|
|
MACOSX_BUNDLE_BUNDLE_VERSION "${STRING_VERSION}"
|
|
|
|
|
MACOSX_BUNDLE_SHORT_VERSION_STRING "${STRING_VERSION}"
|
|
|
|
|
MACOSX_BUNDLE_LONG_VERSION_STRING "${STRING_VERSION}"
|
|
|
|
|
|
|
|
|
|
# Copy file(s) to Contents/Resources
|
|
|
|
|
RESOURCE "${QS_MAC_ICON_PATH}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# =============== Non-Mac OSs (Linux, BSD, etc.) ===============
|
|
|
|
|
else()
|
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/debug")
|
|
|
|
|
else()
|
|
|
|
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/release")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
|
|
|
|
|
|
message(STATUS "[QtScrcpy] Make for non-Mac Unix-like OS.")
|
|
|
|
|
set(INSTALLED_FFMPEG_FOUND false)
|
|
|
|
|
|
|
|
|
|
find_package(PkgConfig)
|
|
|
|
|
if(PkgConfig_FOUND)
|
|
|
|
|
pkg_check_modules(FFmpeg libavformat>=58 libavcodec>=58 libavutil>=56 libswscale>=5)
|
|
|
|
|
if(FFmpeg_FOUND)
|
|
|
|
|
set(INSTALLED_FFMPEG_FOUND true)
|
|
|
|
|
message(STATUS "[QtScrcpy] Development files of FFmpeg were detected in your OS and will be used.")
|
|
|
|
|
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE ${FFmpeg_LDFLAGS})
|
|
|
|
|
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE ${FFmpeg_CFLAGS})
|
|
|
|
|
set(QS_EXTERNAL_LIBS_FFMPEG ${FFmpeg_LIBRARIES})
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT INSTALLED_FFMPEG_FOUND)
|
|
|
|
|
message(STATUS "[QtScrcpy] Development files of FFmpeg were not detected in your OS. Files within third_party/ffmpeg/ will be used.")
|
|
|
|
|
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
|
|
|
|
|
set(QS_EXTERNAL_LIBS_FFMPEG
|
|
|
|
|
avformat
|
|
|
|
|
avcodec
|
|
|
|
|
avutil
|
|
|
|
|
swscale
|
|
|
|
|
Threads::Threads
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
#
|
|
|
|
|
# plantform deps
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# windows
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
|
|
# ffmpeg
|
|
|
|
|
# include
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ../third_party/ffmpeg/include)
|
|
|
|
|
# link
|
|
|
|
|
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/${QC_CPU_ARCH}")
|
|
|
|
|
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
|
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
|
|
|
avformat
|
|
|
|
|
avcodec
|
|
|
|
|
avutil
|
|
|
|
|
swscale
|
|
|
|
|
)
|
|
|
|
|
# copy
|
|
|
|
|
set(FFMPEG_BIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/bin/${QC_CPU_ARCH}")
|
|
|
|
|
get_target_property(FFMPEG_BIN_OUTPUT_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
|
|
|
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avcodec-58.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avformat-58.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avutil-56.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swscale-5.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swresample-3.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
|
# MacOS
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
|
|
|
# ffmpeg
|
|
|
|
|
# include
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ../third_party/ffmpeg/include)
|
|
|
|
|
# link
|
|
|
|
|
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib")
|
|
|
|
|
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
|
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
|
|
|
avformat.58
|
|
|
|
|
avcodec.58
|
|
|
|
|
avutil.56
|
|
|
|
|
swscale.5
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
set(QS_SUBDIRECTORIES_MAIN
|
|
|
|
|
adb
|
|
|
|
|
common
|
|
|
|
|
device
|
|
|
|
|
devicemanage
|
|
|
|
|
fontawesome
|
|
|
|
|
uibase
|
|
|
|
|
util
|
|
|
|
|
)
|
|
|
|
|
foreach(QS_SUBDIRECTORY_MAIN ${QS_SUBDIRECTORIES_MAIN})
|
|
|
|
|
add_subdirectory(${QS_SUBDIRECTORY_MAIN})
|
|
|
|
|
endforeach()
|
|
|
|
|
# copy bundle file
|
|
|
|
|
get_target_property(MACOS_BUNDLE_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
|
|
|
|
|
set(MACOS_BUNDLE_PATH ${MACOS_BUNDLE_PATH}/${PROJECT_NAME}.app/Contents)
|
|
|
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
|
|
|
# dylib,scrcpy-server,adb copy to Contents/MacOS
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libavcodec.58.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libavformat.58.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libavutil.56.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libswscale.5.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libswresample.3.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/scrcpy-server" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/adb/mac/adb" "${MACOS_BUNDLE_PATH}/MacOS"
|
|
|
|
|
# config file copy to Contents/MacOS/config
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../config/config.ini" "${MACOS_BUNDLE_PATH}/MacOS/config"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
|
|
|
|
|
adb
|
|
|
|
|
devicemanage
|
|
|
|
|
# Step 2. ues MACOSX_PACKAGE_LOCATION copy icns to Resources
|
|
|
|
|
set_source_files_properties(
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/res/${PROJECT_NAME}.icns
|
|
|
|
|
PROPERTIES MACOSX_PACKAGE_LOCATION Resources
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Widgets
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Network
|
|
|
|
|
device
|
|
|
|
|
stream
|
|
|
|
|
ui
|
|
|
|
|
util
|
|
|
|
|
# use MACOSX_BUNDLE_INFO_PLIST custom plist, not use MACOSX_BUNDLE_BUNDLE_NAME etc..
|
|
|
|
|
set(INFO_PLIST_TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist.in")
|
|
|
|
|
set(INFO_PLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist")
|
|
|
|
|
file(READ "${INFO_PLIST_TEMPLATE_FILE}" plist_contents)
|
|
|
|
|
string(REPLACE "\${BUNDLE_VERSION}" "${PROJECT_VERSION}" plist_contents ${plist_contents})
|
|
|
|
|
file(WRITE ${INFO_PLIST_FILE} ${plist_contents})
|
|
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
|
|
|
MACOSX_BUNDLE_INFO_PLIST "${INFO_PLIST_FILE}"
|
|
|
|
|
# "" disable code sign
|
|
|
|
|
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# mac framework
|
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE "-framework AppKit")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Linux
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
|
|
|
|
|
|
# include
|
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ../third_party/ffmpeg/include)
|
|
|
|
|
# link
|
|
|
|
|
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib")
|
|
|
|
|
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
|
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
|
|
|
# ffmpeg
|
|
|
|
|
avformat
|
|
|
|
|
avcodec
|
|
|
|
|
avutil
|
|
|
|
|
swscale
|
|
|
|
|
# qx11
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::X11Extras
|
|
|
|
|
# xcb https://doc.qt.io/qt-5/linux-requirements.html
|
|
|
|
|
xcb
|
|
|
|
|
# pthread
|
|
|
|
|
Threads::Threads
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if(QT_VERSION_MAJOR EQUAL 6)
|
|
|
|
|
qt_finalize_executable(${CMAKE_PROJECT_NAME})
|
|
|
|
|
# linux set app icon: https://blog.csdn.net/MrNoboday/article/details/82870853
|
|
|
|
|
endif()
|