@ -18,7 +18,7 @@ find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network LinguistTools REQU
if ( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
# ff m p e g c a n n o t b e c o m p i l e d n a t i v e l y b y MSVC v e r s i o n < 1 2 . 0 ( 2013 )
# FF m p e g c a n n o t b e c o m p i l e d n a t i v e l y b y MSVC v e r s i o n < 1 2 . 0 ( 2013 )
if ( MSVC_VERSION LESS 1800 )
message ( FATAL_ERROR "[QtScrcpy] FATAL ERROR: MSVC version is older than 12.0 (2013)." )
endif ( )
@ -28,6 +28,94 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
endif ( )
# = = = = = = = = = = = = = = = = = = = = m a c O S = = = = = = = = = = = = = = = = = = = =
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
# Q S _ M A C _ R E S O U R C E S : e s o u r c e f i l e l i s t s t o r e d i n C o n t e n t s / M a c O S
file ( GLOB QS_MAC_RESOURCES "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/*.dylib" )
list ( APPEND QS_MAC_RESOURCES
" $ { P R O J E C T _ S O U R C E _ D I R } / t h i r d _ p a r t y / s c r c p y - s e r v e r "
" $ { P R O J E C T _ S O U R C E _ D I R } / a d b / m a c / a d b "
)
# Q S _ M A C _ C O N F I G : C o n f i g f i l e s t o r e d i n C o n t e n t s / M a c O S / c o n f i g
set ( QS_MAC_CONFIG "${PROJECT_SOURCE_DIR}/config/config.ini" )
endif ( )
set ( QS_TS_FILES
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e s / i 1 8 n / z h _ C N . t s
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e s / i 1 8 n / e n _ U S . t s
)
set_source_files_properties ( ${ QS_TS_FILES } PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n" )
set ( QS_SOURCES_MAIN
d i a l o g . c p p
d i a l o g . h
d i a l o g . u i
$ { Q S _ T S _ F I L E S }
)
set ( QS_QRC_MAIN "${CMAKE_CURRENT_SOURCE_DIR}/res/res.qrc" )
if ( ${ QT_VERSION_MAJOR } GREATER_EQUAL 6 ) # Q t v e r s i o n 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
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
elseif ( UNIX )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
qt_add_executable ( ${ CMAKE_PROJECT_NAME } MACOSX_BUNDLE MANUAL_FINALIZATION
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ M A C _ R E S O U R C E S }
$ { Q S _ M A C _ C O N F I G }
$ { Q S _ Q R C _ M A I N }
)
else ( )
qt_add_executable ( ${ CMAKE_PROJECT_NAME } MANUAL_FINALIZATION
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
endif ( )
endif ( )
else ( ) # Q t v e r s i o n 5
qt5_create_translation ( QS_QM_FILES ${ CMAKE_CURRENT_SOURCE_DIR } ${ QS_TS_FILES } )
if ( WIN32 )
add_executable ( ${ CMAKE_PROJECT_NAME } WIN32
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
elseif ( UNIX )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
add_executable ( ${ CMAKE_PROJECT_NAME } MACOSX_BUNDLE
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ M A C _ R E S O U R C E S }
$ { Q S _ M A C _ C O N F I G }
$ { Q S _ Q R C _ M A I N }
)
else ( )
add_executable ( ${ CMAKE_PROJECT_NAME }
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
endif ( )
endif ( )
endif ( )
# * * * * * * * * * * * * * * * * * * * * M i c r o s o f t W i n d o w s * * * * * * * * * * * * * * * * * * * *
if ( WIN32 )
message ( STATUS "[QtScrcpy] Make for Microsoft Windows." )
@ -40,43 +128,70 @@ if(WIN32)
V E R S I O N _ P A T C H = $ { V E R S I O N _ P A T C H }
V E R S I O N _ R C _ S T R = \ \ \ " $ { V E R S I O N _ M A J O R } . $ { V E R S I O N _ M I N O R } . $ { V E R S I O N _ P A T C H } \ \ \ "
)
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 ) # C o m p i l e r i s 6 4 - b i t
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 ) # C o m p i l e r i s 6 4 - b i t
message ( STATUS "[QtScrcpy] 64-bit compiler detected." )
set ( QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x64" )
set ( QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x64" )
if ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/debug" )
message ( STATUS "[QtScrcpy] In debug mode." )
set_target_properties ( ${ CMAKE_PROJECT_NAME } PROPERTIES
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { P R O J E C T _ S O U R C E _ D I R } / o u t p u t / w i n / x 6 4 / d e b u g "
)
else ( )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/release" )
message ( STATUS "[QtScrcpy] In release mode." )
set_target_properties ( ${ CMAKE_PROJECT_NAME } PROPERTIES
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { P R O J E C T _ S O U R C E _ D I R } / o u t p u t / w i n / x 6 4 / r e l e a s e " )
endif ( )
elseif ( CMAKE_SIZEOF_VOID_P EQUAL 4 ) # C o m p i l e r i s 3 2 - b i t
set ( QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x64" )
elseif ( CMAKE_SIZEOF_VOID_P EQUAL 4 ) # C o m p i l e r i s 3 2 - b i t
message ( STATUS "[QtScrcpy] 32-bit compiler detected." )
set ( QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x86" )
set ( QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x86" )
if ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/debug" )
message ( STATUS "[QtScrcpy] In debug mode." )
set_target_properties ( ${ CMAKE_PROJECT_NAME } PROPERTIES
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { P R O J E C T _ S O U R C E _ D I R } / o u t p u t / w i n / x 8 6 / d e b u g " )
else ( )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/release" )
message ( STATUS "[QtScrcpy] In release mode." )
set_target_properties ( ${ CMAKE_PROJECT_NAME } PROPERTIES
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { P R O J E C T _ S O U R C E _ D I R } / o u t p u t / w i n / x 8 6 / r e l e a s e " )
endif ( )
endif ( )
link_directories ( ${ QS_DLL_PATH } )
set ( QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x86" )
endif ( )
# 构 建 完 成 后 复 制 D L L 依 赖 库
# C o p y D L L d e p e n d e n c i e s a f t e r b u i l d i n g
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
$ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { Q S _ D L L _ F I L E } " " $ { PR O J E C T _ B I N A R Y _ D I R } "
" $ { Q S _ D L L _ F I L E } " " $ { QS _ R U N T I M E _ O U T P U T _ D I R E C T O R Y } "
)
endforeach ( )
set ( QS_EXTERNAL_LIBS_FFMPEG
a v f o r m a t
a v c o d e c
a v u t i l
s w s c a l e
)
# I f M i n G W i s u s e d , i t i s n o t a p p r o p r i a t e t o l i n k s t a t i c MSVC l i b s .
# I n s t e a d , w e l i n k D L L s d i r e c t l y
if ( MSVC )
message ( STATUS "[QtScrcpy] Microsoft Visual C++ is used." )
link_directories ( ${ QS_LIB_PATH } )
set ( QS_EXTERNAL_LIBS_FFMPEG
a v f o r m a t
a v c o d e c
a v u t i l
s w s c a l e
)
elseif ( MINGW )
message ( STATUS "[QtScrcpy] MinGW GCC is used." )
target_link_options ( ${ CMAKE_PROJECT_NAME } PRIVATE
" - s t a t i c "
$ { Q S _ D L L _ F I L E S }
" - W l , - - e n a b l e - s t d c a l l - f i x u p "
)
endif ( )
set ( RC_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/QtScrcpy.rc" )
@ -94,17 +209,7 @@ elseif(UNIX)
else ( )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/release" )
endif ( )
# Q S _ M A C _ R E S O U R C E S : e s o u r c e f i l e l i s t s t o r e d i n C o n t e n t s / M a c O S
file ( GLOB QS_MAC_RESOURCES "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/*.dylib" )
list ( APPEND QS_MAC_RESOURCES
" $ { P R O J E C T _ S O U R C E _ D I R } / t h i r d _ p a r t y / s c r c p y - s e r v e r "
" $ { P R O J E C T _ S O U R C E _ D I R } / a d b / m a c / a d b "
)
# Q S _ M A C _ C O N F I G : C o n f i g f i l e s t o r e d i n C o n t e n t s / M a c O S / c o n f i g
set ( QS_MAC_CONFIG "${PROJECT_SOURCE_DIR}/config/config.ini" )
# I c o n f i l e s t o r e d i n C o n t e n t s / R e s o u r c e s
set ( QS_MAC_ICON_NAME "QtScrcpy.icns" )
set ( QS_MAC_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/${QS_MAC_ICON_NAME}" )
@ -116,6 +221,13 @@ elseif(UNIX)
M A C O S X _ P A C K A G E _ L O C A T I O N " M a c O S / c o n f i g "
)
set ( QS_EXTERNAL_LIBS_FFMPEG
a v f o r m a t . 5 8
a v c o d e c . 5 8
a v u t i l . 5 6
s w s c a l e . 5
)
set_target_properties ( ${ CMAKE_PROJECT_NAME } PROPERTIES
# T h e b a s e p l i s t t e m p l a t e f i l e
M A C O S X _ B U N D L E _ I N F O _ P L I S T " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e s / I n f o _ M a c . p l i s t "
@ -124,19 +236,12 @@ elseif(UNIX)
M A C O S X _ B U N D L E _ B U N D L E _ V E R S I O N " $ { S T R I N G _ V E R S I O N } "
M A C O S X _ B U N D L E _ S H O R T _ V E R S I O N _ S T R I N G " $ { S T R I N G _ V E R S I O N } "
M A C O S X _ B U N D L E _ L O N G _ V E R S I O N _ S T R I N G " $ { S T R I N G _ V E R S I O N } "
# C o p y file ( s ) t o C o n t e n t s / R e s o u r c e s
R E S O U R C E " $ { Q S _ M A C _ I C O N _ P A T H } "
)
set ( QS_EXTERNAL_LIBS_FFMPEG
a v f o r m a t . 5 8
a v c o d e c . 5 8
a v u t i l . 5 6
s w s c a l e . 5
)
# = = = = = = = = = = N o n - M a c U n i x - l i k e OS ( Linux, BSD, etc. ) = = = = = = = = = =
# = = = = = = = = = = = = = = = N o n - M a c OSs ( Linux, BSD, etc. ) = = = = = = = = = = = = = = =
else ( )
if ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/debug" )
@ -157,6 +262,7 @@ elseif(UNIX)
message ( STATUS "[QtScrcpy] Development files of FFmpeg ${FFmpeg_VERSION} were detected in your OS and will be used." )
target_link_options ( ${ CMAKE_PROJECT_NAME } "${FFmpeg_LIBRARIES}" )
target_compile_options ( ${ CMAKE_PROJECT_NAME } "${FFmpeg_CFLAGS}" )
set ( QS_EXTERNAL_LIBS_FFMPEG PkgConfig::FFmpeg )
endif ( )
endif ( )
@ -173,77 +279,6 @@ elseif(UNIX)
endif ( )
endif ( )
set ( QS_TS_FILES
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e s / i 1 8 n / z h _ C N . t s
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / r e s / i 1 8 n / e n _ U S . t s
)
set_source_files_properties ( ${ QS_TS_FILES } PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n" )
set ( QS_SOURCES_MAIN
d i a l o g . c p p
d i a l o g . h
d i a l o g . u i
$ { Q S _ T S _ F I L E S }
)
set ( QS_QRC_MAIN "${CMAKE_CURRENT_SOURCE_DIR}/res/res.qrc" )
if ( ${ QT_VERSION_MAJOR } GREATER_EQUAL 6 ) # Q t v e r s i o n 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
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
elseif ( UNIX )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
qt_add_executable ( ${ CMAKE_PROJECT_NAME } MACOSX_BUNDLE MANUAL_FINALIZATION
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ M A C _ R E S O U R C E S }
$ { Q S _ M A C _ C O N F I G }
$ { Q S _ Q R C _ M A I N }
)
else ( )
qt_add_executable ( ${ CMAKE_PROJECT_NAME } MANUAL_FINALIZATION
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
endif ( )
endif ( )
else ( ) # Q t v e r s i o n 5
qt5_create_translation ( QS_QM_FILES ${ CMAKE_CURRENT_SOURCE_DIR } ${ QS_TS_FILES } )
if ( WIN32 )
add_executable ( ${ CMAKE_PROJECT_NAME } WIN32
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
elseif ( UNIX )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
add_executable ( ${ CMAKE_PROJECT_NAME } MACOSX_BUNDLE
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ M A C _ R E S O U R C E S }
$ { Q S _ M A C _ C O N F I G }
$ { Q S _ Q R C _ M A I N }
)
else ( )
add_executable ( ${ CMAKE_PROJECT_NAME }
m a i n . c p p
$ { Q S _ S O U R C E S _ M A I N }
$ { Q S _ Q R C _ M A I N }
)
endif ( )
endif ( )
endif ( )
target_include_directories ( ${ CMAKE_PROJECT_NAME } PRIVATE ${ CMAKE_CURRENT_SOURCE_DIR } )
set ( QS_SUBDIRECTORIES_MAIN