From 14b2f809b80bc4607cb1013dc4146c4aeb5666fd Mon Sep 17 00:00:00 2001 From: Kevin Yue Date: Mon, 13 Sep 2021 23:58:51 +0800 Subject: [PATCH] update dependency --- CMakeLists.txt | 19 +----------------- GPClient/CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++++++--- GPService/CMakeLists.txt | 29 +++++++++++++++++++++++++-- cmake/Add3rdParty.cmake | 23 ++++++++++++++------- 4 files changed, 84 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3889807..e053ca2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,33 +9,16 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) -set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication") - find_package(Qt5 REQUIRED COMPONENTS Core Widgets + Network WebSockets WebEngine WebEngineWidgets DBus ) -include(cmake/Add3rdParty.cmake) - -add_3rdparty( - NAME SingleApplication - GITHUB_REPOSITORY itay-grudev/SingleApplication - VERSION 3.3.0 - EXCLUDE_FROM_ALL -) - -add_3rdparty( - NAME plog - GITHUB_REPOSITORY SergiusTheBest/plog - GIT_TAG 1.1.5 - EXCLUDE_FROM_ALL -) - add_subdirectory(GPService) add_subdirectory(GPClient) diff --git a/GPClient/CMakeLists.txt b/GPClient/CMakeLists.txt index 3a47b64..a12a073 100644 --- a/GPClient/CMakeLists.txt +++ b/GPClient/CMakeLists.txt @@ -1,6 +1,9 @@ +include("${CMAKE_SOURCE_DIR}/cmake/Add3rdParty.cmake") + project(GPClient) set(gpclient_GENERATED_SOURCES) +# set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication") qt5_add_dbus_interface(gpclient_GENERATED_SOURCES ${CMAKE_BINARY_DIR}/com.yuezk.qt.GPService.xml gpserviceinterface) @@ -28,18 +31,52 @@ add_executable(gpclient ${gpclient_GENERATED_SOURCES} ) -target_include_directories(gpclient PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +add_3rdparty( + SingleApplication + GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git + GIT_TAG v3.3.0 + EXCLUDE_FROM_ALL + CMAKE_ARGS -DQAPPLICATION_CLASS=QApplication +) + +add_3rdparty( + plog + GIT_REPOSITORY https://github.com/SergiusTheBest/plog.git + GIT_TAG 1.1.5 + EXCLUDE_FROM_ALL + CMAKE_ARGS -DPLOG_BUILD_SAMPLES=OFF +) + +ExternalProject_Get_Property(SingleApplication-${PROJECT_NAME} SOURCE_DIR) +set(SingleApplication_INCLUDE_DIR ${SOURCE_DIR}) + +ExternalProject_Get_Property(SingleApplication-${PROJECT_NAME} BINARY_DIR) +set(SingleApplication_LIBRARY ${BINARY_DIR}/libSingleApplication.a) + +ExternalProject_Get_Property(plog-${PROJECT_NAME} SOURCE_DIR) +set(plog_INCLUDE_DIR "${SOURCE_DIR}/include") + +add_dependencies(gpservice SingleApplication-${PROJECT_NAME} plog-${PROJECT_NAME}) + +target_include_directories(gpclient PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${SingleApplication_INCLUDE_DIR} + ${plog_INCLUDE_DIR} +) target_link_libraries(gpclient - plog - SingleApplication + ${SingleApplication_LIBRARY} Qt5::Widgets + Qt5::Network Qt5::WebSockets Qt5::WebEngine Qt5::WebEngineWidgets Qt5::DBus ) +target_compile_definitions(gpclient PUBLIC QAPPLICATION_CLASS=QApplication) + install(TARGETS gpclient DESTINATION "/usr/bin") install(FILES com.yuezk.qt.gpclient.desktop DESTINATION "/usr/share/applications") install(FILES com.yuezk.qt.GPClient.svg DESTINATION "/usr/share/pixmaps") \ No newline at end of file diff --git a/GPService/CMakeLists.txt b/GPService/CMakeLists.txt index 8cacdf1..4f0f159 100644 --- a/GPService/CMakeLists.txt +++ b/GPService/CMakeLists.txt @@ -1,3 +1,5 @@ +include("${CMAKE_SOURCE_DIR}/cmake/Add3rdParty.cmake") + project(GPService) set(gpservice_GENERATED_SOURCES) @@ -20,14 +22,37 @@ add_executable(gpservice ${gpservice_GENERATED_SOURCES} ) -target_include_directories(gpservice PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +add_3rdparty( + SingleApplication + GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git + GIT_TAG v3.3.0 + EXCLUDE_FROM_ALL + CMAKE_ARGS -DQAPPLICATION_CLASS=QCoreApplication +) + +ExternalProject_Get_Property(SingleApplication-${PROJECT_NAME} SOURCE_DIR) +ExternalProject_Get_Property(SingleApplication-${PROJECT_NAME} BINARY_DIR) + +set(SingleApplication_INCLUDE_DIR ${SOURCE_DIR}) +set(SingleApplication_LIBRARY ${BINARY_DIR}/libSingleApplication.a) + +add_dependencies(gpservice SingleApplication-${PROJECT_NAME}) + +target_include_directories(gpservice PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${SingleApplication_INCLUDE_DIR} +) target_link_libraries(gpservice - SingleApplication + ${SingleApplication_LIBRARY} Qt5::Core + Qt5::Network Qt5::DBus ) +target_compile_definitions(gpservice PUBLIC QAPPLICATION_CLASS=QCoreApplication) + install(TARGETS gpservice DESTINATION "/usr/bin") install(FILES "dbus/com.yuezk.qt.GPService.conf" DESTINATION "/usr/share/dbus-1/system.d" ) install(FILES "dbus/com.yuezk.qt.GPService.service" DESTINATION "/usr/share/dbus-1/system-services") diff --git a/cmake/Add3rdParty.cmake b/cmake/Add3rdParty.cmake index 7f3b8bf..f7ab8e3 100644 --- a/cmake/Add3rdParty.cmake +++ b/cmake/Add3rdParty.cmake @@ -1,8 +1,8 @@ -include(cmake/CPM.cmake) +include(ExternalProject) -function(add_3rdparty) - cmake_parse_arguments(add_3rdparty_args "EXCLUDE_FROM_ALL" "NAME" "" ${ARGN}) - set(NAME ${add_3rdparty_args_NAME}) +function(add_3rdparty NAME) + set(oneValueArgs GIT_REPOSITORY GIT_TAG) + cmake_parse_arguments(add_3rdparty_args "EXCLUDE_FROM_ALL" "${oneValueArgs}" "" ${ARGN}) if(EXISTS "${CMAKE_SOURCE_DIR}/3rdparty/${NAME}/CMakeLists.txt") message(STATUS "Found third party locally for ${NAME}") @@ -13,12 +13,21 @@ function(add_3rdparty) set(addSubdirectoryExtraArgs "") endif() - add_subdirectory( - "${CMAKE_SOURCE_DIR}/3rdparty/${NAME}" + ExternalProject_Add( + ${NAME}-${PROJECT_NAME} + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/${NAME} + SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/${NAME}" + INSTALL_COMMAND "" ${addSubdirectoryExtraArgs} + "${add_3rdparty_args_UNPARSED_ARGUMENTS}" ) return() endif() + message(STATUS "Using CPM to download ${NAME}") - CPMAddPackage(${ARGN}) + ExternalProject_Add( + ${NAME}-${PROJECT_NAME} + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/${NAME} + "${ARGN}" + ) endfunction()