Skip to content

Commit

Permalink
完善cmake的安装
Browse files Browse the repository at this point in the history
- 完善cmake install
- 测试qt6.0以上frameless的兼容性
  • Loading branch information
czyt1988 committed Nov 9, 2023
1 parent 1487ad4 commit bde6d28
Show file tree
Hide file tree
Showing 7 changed files with 178 additions and 21 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ Thumbs.db
.*.swp

# Visual Studio generated files
CMakeSettings.json
*.ib_pdb_index
*.idb
*.ilk
Expand Down
42 changes: 37 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.5)

set(SARIBBON_VERSION_MAJOR 1)
set(SARIBBON_VERSION_MINOR 0)
set(SARIBBON_VERSION_PATCH 4)
set(SARIBBON_VERSION_PATCH 5)
set(SARIBBON_VERSION "${SARIBBON_VERSION_MAJOR}.${SARIBBON_VERSION_MINOR}.${SARIBBON_VERSION_PATCH}")
project(SARibbon VERSION ${SARIBBON_VERSION} LANGUAGES CXX)

Expand All @@ -15,9 +15,9 @@ option(BUILD_EXAMPLES "build the examples" ON)

# load Qt library, minimum version required is 5.8
# cn:Qt库加载,最低版本要求为5.8

set(SARIBBON_MIN_QT_VERSION 5.8)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} 5.8 COMPONENTS Core Gui Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} ${SARIBBON_MIN_QT_VERSION} COMPONENTS Core Gui Widgets REQUIRED)
message(STATUS "current Qt version is Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}")


Expand All @@ -32,8 +32,8 @@ if(${QT_VERSION_MAJOR} EQUAL 5)
endif()
elseif(${QT_VERSION_MAJOR} EQUAL 6)
# qt版本为6,判断是否小版本大于4
if(${QT_VERSION_MINOR} GREATER_EQUAL 4)
#6.4及以上可以使用frameless
if(${QT_VERSION_MINOR} GREATER_EQUAL 0)
#6.0及以上可以使用frameless
set(SARIBBON_USE_FRAMELESS_LIB ON)
else()
set(SARIBBON_USE_FRAMELESS_LIB OFF)
Expand Down Expand Up @@ -110,3 +110,35 @@ set(SARIBBON_BIN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${SARIBBON_BIN_NAME})

add_subdirectory(src)
add_subdirectory(cmake)

##################################
# install
##################################

# document-文档
set(SARIBBON_DOC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/readme.md
${CMAKE_CURRENT_SOURCE_DIR}/readme-cn.md
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
)
install(DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}/doc
DESTINATION ${CMAKE_INSTALL_PREFIX}
COMPONENT document
)
install(FILES
${SARIBBON_DOC_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}
COMPONENT document
)

# pri文件
set(SARIBBON_QMAKE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/cmake/common.pri
${CMAKE_CURRENT_SOURCE_DIR}/cmake/SARibbonBar.pri
)
install(FILES
${SARIBBON_QMAKE_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}
COMPONENT qmake
)
2 changes: 2 additions & 0 deletions cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
configure_file (project-config.cmake.in
"${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake" @ONLY)

configure_file (project-config-version.cmake.in
"${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake" @ONLY)

install (FILES
"${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake"
DESTINATION "cmake")

install (FILES
"${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake"
DESTINATION "cmake")
38 changes: 38 additions & 0 deletions cmake/SARibbonBar.pri
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
include($$PWD/common.pri)

INCLUDEPATH += $$PWD/include/SARibbon
DEPENDPATH += $$PWD/include/SARibbon


greaterThan(QT_MAJOR_VERSION, 4){
# 目前 frameless支持qt5.14,qt5.15,qt6.4+,除了上诉版本,都使用不了
greaterThan(QT_MINOR_VERSION, 13){
SA_RIBBON_CONFIG += use_frameless
}
}else{
# Qt6,qt6.4+可使用frameless
greaterThan(QT_MAJOR_VERSION, 5){
greaterThan(QT_MINOR_VERSION, 3){
SA_RIBBON_CONFIG += use_frameless
}
}
}

contains( SA_RIBBON_CONFIG, use_frameless ) {
!contains(CONFIG,C++17){
CONFIG += c++17
}
# framelessHelper的引用路径
INCLUDEPATH += $$PWD/include/SARibbon/3rdparty/framelesshelper/include
DEPENDPATH += $$PWD/include/SARibbon/3rdparty/framelesshelper/include
INCLUDEPATH += $$PWD/include/SARibbon/3rdparty/framelesshelper/qmake/inc/core
DEPENDPATH += $$PWD/include/SARibbon/3rdparty/framelesshelper/qmake/inc/core
# 定义FRAMELESSHELPER_FEATURE_static_build为-1让frameless也作为库的一部分
DEFINES += FRAMELESSHELPER_FEATURE_static_build=-1
# 定义SARIBBON_USE_3RDPARTY_FRAMELESSHELPER为1
DEFINES += SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=1
}else{
DEFINES += SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=0
}
LIBS += -L$${SARIBBON_BIN_DIR} -l$${SARIBBON_LIB_NAME}

21 changes: 21 additions & 0 deletions cmake/common.pri
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# this file for cmake install

msvc {
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
}

#生成一个区别debug和release模式的lib名,输入一个lib名字
defineReplace(saRibbonLibNameMake) {
LibName = $$1
CONFIG(debug, debug|release){
LibName = $${LibName}d
}else{
LibName = $${LibName}
}
return ($${LibName})
}

SARIBBON_BIN_DIR = $$PWD/lib
SARIBBONBAR_PRI_FILE_PATH = $$PWD/SARibbonBar.pri # 源代码路径
SARIBBON_LIB_NAME=$$saRibbonLibNameMake(SARibbonBar)
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ QT_END_NAMESPACE
#endif

// QLatin1StringView can't be constexpr until Qt6?
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
#if (QT_VERSION >= QT_VERSION_CHECK(6, 4, 0))
# define Q_STRING_CONSTEXPR constexpr
#else
# define Q_STRING_CONSTEXPR
Expand Down
93 changes: 78 additions & 15 deletions src/SARibbonBar/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -143,23 +143,31 @@ if(SARIBBON_USE_FRAMELESS_LIB)
${FRAMELESS_SOURCE_DIR_WIDGETS}/framelesshelperwidgets_global.cpp
${FRAMELESS_SOURCE_DIR_WIDGETS}/framelessdialog.cpp
)
# 把所有FRAMELESS相关的库合并到一起
SET(FRAMELESS_HEADER_FILES ${FRAMELESS_CORE_CONFIG_HEADER_FILES})
list(APPEND FRAMELESS_HEADER_FILES ${FRAMELESS_CORE_HEADER_FILES})
list(APPEND FRAMELESS_HEADER_FILES ${FRAMELESS_WIDGETS_HEADER_FILES})
SET(FRAMELESS_SOURCE_FILES ${FRAMELESS_CORE_SOURCE_FILES})
list(APPEND FRAMELESS_SOURCE_FILES ${FRAMELESS_WIDGETS_SOURCE_FILES})
SET(FRAMELESS_RESOURCE_FILES ${FRAMELESS_CORE_RESOURCES_FILES})
endif()
#################################################
# SAColorWidgets相关
# https://github.com/czyt1988/SAColorWidgets
#################################################
SET(SACOLOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/colorWidgets)
SET(SACOLOR_HEADER_FILES
./colorWidgets/SAColorWidgetsGlobal.h
./colorWidgets/SAColorToolButton.h
./colorWidgets/SAColorGridWidget.h
./colorWidgets/SAColorPaletteGridWidget.h
./colorWidgets/SAColorMenu.h
${SACOLOR_DIR}/SAColorWidgetsGlobal.h
${SACOLOR_DIR}/SAColorToolButton.h
${SACOLOR_DIR}/SAColorGridWidget.h
${SACOLOR_DIR}/SAColorPaletteGridWidget.h
${SACOLOR_DIR}/SAColorMenu.h
)
SET(SACOLOR_SOURCE_FILES
./colorWidgets/SAColorToolButton.cpp
./colorWidgets/SAColorGridWidget.cpp
./colorWidgets/SAColorPaletteGridWidget.cpp
./colorWidgets/SAColorMenu.cpp
${SACOLOR_DIR}/SAColorToolButton.cpp
${SACOLOR_DIR}/SAColorGridWidget.cpp
${SACOLOR_DIR}/SAColorPaletteGridWidget.cpp
${SACOLOR_DIR}/SAColorMenu.cpp
)

#################################################
Expand Down Expand Up @@ -266,12 +274,9 @@ if(SARIBBON_USE_FRAMELESS_LIB)
${SARIBBON_RESOURCE_FILES}
${SACOLOR_HEADER_FILES}
${SACOLOR_SOURCE_FILES}
${FRAMELESS_CORE_CONFIG_HEADER_FILES}
${FRAMELESS_CORE_HEADER_FILES}
${FRAMELESS_CORE_SOURCE_FILES}
${FRAMELESS_CORE_RESOURCES_FILES}
${FRAMELESS_WIDGETS_HEADER_FILES}
${FRAMELESS_WIDGETS_SOURCE_FILES}
${FRAMELESS_HEADER_FILES}
${FRAMELESS_SOURCE_FILES}
${FRAMELESS_RESOURCE_FILES}
)
else()
add_library(${SARIBBONBAR_LIB_NAME} SHARED
Expand Down Expand Up @@ -384,6 +389,7 @@ endif()
# ------------------------------- install script -------------------------------
set(SARIBBON_INSTALL_DIR SARibbon)
set(CMAKE_INSTALL_PREFIX ${SARIBBON_BIN_DIR})
message(STATUS "install dir ${SARIBBON_BIN_DIR}")
# Generate library version info which will generate xxxConfigVersion.cmake,
# the ${PACKAGE_VERSION} is the version defined in project()
include(CMakePackageConfigHelpers)
Expand All @@ -402,6 +408,63 @@ install(FILES
DESTINATION include/${SARIBBON_INSTALL_DIR}/colorWidgets
COMPONENT headers
)

# 生成单一文件
# 单一文件是把整个SARibbon打包为一个h和一个cpp,方便集成
set(SARIBBON_AMALGAMATE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../SARibbon.h
${CMAKE_CURRENT_SOURCE_DIR}/../SARibbon.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../SARibbon.pri)
install(FILES
${SARIBBON_AMALGAMATE_FILES}
DESTINATION amalgamate
COMPONENT amalgamate
)
install(FILES
${SARIBBON_RESOURCE_FILES}
DESTINATION amalgamate/SARibbonBar
COMPONENT amalgamate
)
set(SARIBBON_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resource)
set(SARIBBON_RESOURCE_RAW_FILES
${SARIBBON_RESOURCE_DIR}/theme-win7.qss
${SARIBBON_RESOURCE_DIR}/theme-office2013.qss
${SARIBBON_RESOURCE_DIR}/theme-dark.qss
${SARIBBON_RESOURCE_DIR}/ArrowDown.png
${SARIBBON_RESOURCE_DIR}/ArrowMore.png
${SARIBBON_RESOURCE_DIR}/ArrowUp.png
${SARIBBON_RESOURCE_DIR}/ribbonPannelOptionButton.png
${SARIBBON_RESOURCE_DIR}/define-color.svg
${SARIBBON_RESOURCE_DIR}/Titlebar_Close.png
${SARIBBON_RESOURCE_DIR}/Titlebar_Close_Hover.png
${SARIBBON_RESOURCE_DIR}/Titlebar_Max.png
${SARIBBON_RESOURCE_DIR}/Titlebar_Min.png
${SARIBBON_RESOURCE_DIR}/Titlebar_Normal.png
${SARIBBON_RESOURCE_DIR}/Titlebar_Shade.png
${SARIBBON_RESOURCE_DIR}/Titlebar_Unshade.png
)
install(FILES
${SARIBBON_RESOURCE_RAW_FILES}
DESTINATION amalgamate/SARibbonBar/resource
COMPONENT amalgamate
)

# 如果开启了frameless,要把frameless的文件也拷贝过去
if(SARIBBON_USE_FRAMELESS_LIB)
#复制目录src/SARibbonBar/3rdparty/framelesshelper/include/
install(DIRECTORY
${FRAMELESS_HEADER_DIR}
DESTINATION include/${SARIBBON_INSTALL_DIR}/3rdparty/framelesshelper/include
COMPONENT headers
)
#复制目录src/SARibbonBar/3rdparty/framelesshelper/qmake/
SET(FRAMELESS_QMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/framelesshelper/qmake)
install(DIRECTORY
${FRAMELESS_QMAKE_DIR}
DESTINATION include/${SARIBBON_INSTALL_DIR}/3rdparty/framelesshelper/
COMPONENT headers
)
endif()

install(TARGETS ${SARIBBONBAR_LIB_NAME}
EXPORT SARibbonTargets
RUNTIME DESTINATION bin
Expand Down

0 comments on commit bde6d28

Please sign in to comment.