290 lines
9.8 KiB
CMake
290 lines
9.8 KiB
CMake
![]() |
cmake_minimum_required(VERSION 3.5)
|
|||
|
project(SARibbonBar LANGUAGES CXX VERSION ${SARIBBON_VERSION})
|
|||
|
set(SARIBBON_LIB_NAME SARibbonBar)
|
|||
|
message(STATUS "SARIBBON_LIB_NAME=${SARIBBON_LIB_NAME}")
|
|||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|||
|
|
|||
|
#################################################
|
|||
|
# SAColorWidgets相关
|
|||
|
# https://github.com/czyt1988/SAColorWidgets
|
|||
|
#################################################
|
|||
|
SET(SACOLOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/colorWidgets)
|
|||
|
SET(SACOLOR_HEADER_FILES
|
|||
|
${SACOLOR_DIR}/SAColorWidgetsGlobal.h
|
|||
|
${SACOLOR_DIR}/SAColorToolButton.h
|
|||
|
${SACOLOR_DIR}/SAColorGridWidget.h
|
|||
|
${SACOLOR_DIR}/SAColorPaletteGridWidget.h
|
|||
|
${SACOLOR_DIR}/SAColorMenu.h
|
|||
|
)
|
|||
|
SET(SACOLOR_SOURCE_FILES
|
|||
|
${SACOLOR_DIR}/SAColorToolButton.cpp
|
|||
|
${SACOLOR_DIR}/SAColorGridWidget.cpp
|
|||
|
${SACOLOR_DIR}/SAColorPaletteGridWidget.cpp
|
|||
|
${SACOLOR_DIR}/SAColorMenu.cpp
|
|||
|
)
|
|||
|
|
|||
|
#################################################
|
|||
|
# SARibbonBar相关
|
|||
|
#################################################
|
|||
|
|
|||
|
|
|||
|
# header files
|
|||
|
# cn:头文件
|
|||
|
SET(SARIBBON_HEADER_FILES
|
|||
|
SARibbonBarVersionInfo.h
|
|||
|
SARibbonGlobal.h
|
|||
|
SAFramelessHelper.h
|
|||
|
SARibbonActionsManager.h
|
|||
|
SARibbonBar.h
|
|||
|
SARibbonCustomizeData.h
|
|||
|
SARibbonCustomizeDialog.h
|
|||
|
SARibbonCustomizeWidget.h
|
|||
|
SARibbonMainWindow.h
|
|||
|
SARibbonWidget.h
|
|||
|
SARibbonSystemButtonBar.h
|
|||
|
SARibbonApplicationButton.h
|
|||
|
SARibbonTabBar.h
|
|||
|
SARibbonCategory.h
|
|||
|
SARibbonContextCategory.h
|
|||
|
SARibbonPannel.h
|
|||
|
SARibbonToolButton.h
|
|||
|
SARibbonMenu.h
|
|||
|
SARibbonPannelOptionButton.h
|
|||
|
SARibbonSeparatorWidget.h
|
|||
|
SARibbonCategoryLayout.h
|
|||
|
SARibbonGallery.h
|
|||
|
SARibbonControlButton.h
|
|||
|
SARibbonGalleryGroup.h
|
|||
|
SARibbonGalleryItem.h
|
|||
|
SARibbonComboBox.h
|
|||
|
SARibbonElementFactory.h
|
|||
|
SARibbonElementManager.h
|
|||
|
SARibbonLineEdit.h
|
|||
|
SARibbonCheckBox.h
|
|||
|
SARibbonButtonGroupWidget.h
|
|||
|
SARibbonStackedWidget.h
|
|||
|
SARibbonQuickAccessBar.h
|
|||
|
SARibbonCtrlContainer.h
|
|||
|
SARibbonPannelLayout.h
|
|||
|
SARibbonPannelItem.h
|
|||
|
SARibbonLineWidgetContainer.h
|
|||
|
SARibbonColorToolButton.h
|
|||
|
)
|
|||
|
|
|||
|
# source files
|
|||
|
# cn:cpp文件
|
|||
|
SET(SARIBBON_SOURCE_FILES
|
|||
|
SAFramelessHelper.cpp
|
|||
|
SARibbonActionsManager.cpp
|
|||
|
SARibbonBar.cpp
|
|||
|
SARibbonCustomizeData.cpp
|
|||
|
SARibbonCustomizeDialog.cpp
|
|||
|
SARibbonCustomizeWidget.cpp
|
|||
|
SARibbonMainWindow.cpp
|
|||
|
SARibbonWidget.cpp
|
|||
|
SARibbonSystemButtonBar.cpp
|
|||
|
SARibbonApplicationButton.cpp
|
|||
|
SARibbonTabBar.cpp
|
|||
|
SARibbonCategory.cpp
|
|||
|
SARibbonContextCategory.cpp
|
|||
|
SARibbonPannel.cpp
|
|||
|
SARibbonToolButton.cpp
|
|||
|
SARibbonMenu.cpp
|
|||
|
SARibbonPannelOptionButton.cpp
|
|||
|
SARibbonSeparatorWidget.cpp
|
|||
|
SARibbonCategoryLayout.cpp
|
|||
|
SARibbonGallery.cpp
|
|||
|
SARibbonControlButton.cpp
|
|||
|
SARibbonGalleryGroup.cpp
|
|||
|
SARibbonGalleryItem.cpp
|
|||
|
SARibbonComboBox.cpp
|
|||
|
SARibbonElementFactory.cpp
|
|||
|
SARibbonElementManager.cpp
|
|||
|
SARibbonLineEdit.cpp
|
|||
|
SARibbonCheckBox.cpp
|
|||
|
SARibbonButtonGroupWidget.cpp
|
|||
|
SARibbonStackedWidget.cpp
|
|||
|
SARibbonQuickAccessBar.cpp
|
|||
|
SARibbonCtrlContainer.cpp
|
|||
|
SARibbonPannelLayout.cpp
|
|||
|
SARibbonPannelItem.cpp
|
|||
|
SARibbonLineWidgetContainer.cpp
|
|||
|
SARibbonColorToolButton.cpp
|
|||
|
)
|
|||
|
|
|||
|
# resource files
|
|||
|
# cn:资源文件
|
|||
|
SET(SARIBBON_RESOURCE_FILES
|
|||
|
resource.qrc
|
|||
|
)
|
|||
|
|
|||
|
################################################################
|
|||
|
|
|||
|
add_library(${SARIBBON_LIB_NAME} SHARED
|
|||
|
${SARIBBON_HEADER_FILES}
|
|||
|
${SARIBBON_SOURCE_FILES}
|
|||
|
${SARIBBON_RESOURCE_FILES}
|
|||
|
${SACOLOR_HEADER_FILES}
|
|||
|
${SACOLOR_SOURCE_FILES}
|
|||
|
)
|
|||
|
add_library(${SARIBBON_LIB_NAME}::${SARIBBON_LIB_NAME} ALIAS ${SARIBBON_LIB_NAME})
|
|||
|
#################################################
|
|||
|
# Qt相关的依赖
|
|||
|
#################################################
|
|||
|
target_link_libraries(${SARIBBON_LIB_NAME} PUBLIC
|
|||
|
Qt${QT_VERSION_MAJOR}::Core
|
|||
|
Qt${QT_VERSION_MAJOR}::Gui
|
|||
|
Qt${QT_VERSION_MAJOR}::Widgets)
|
|||
|
message(STATUS "link ${SARIBBON_LIB_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets")
|
|||
|
|
|||
|
#################################################
|
|||
|
# frameless相关的依赖
|
|||
|
# qwindowkit库 https://github.com/stdware/qwindowkit
|
|||
|
#################################################
|
|||
|
# Qt X11Extras was first introduced in 5.1 and got removed in 6.0
|
|||
|
# But it was again brought back as a private feature of QtGui in 6.2
|
|||
|
if(_SARIBBON_USE_FRAMELESS_LIB)
|
|||
|
find_package(QWindowKit REQUIRED)
|
|||
|
target_link_libraries(${SARIBBON_LIB_NAME} PUBLIC QWindowKit::Widgets)
|
|||
|
message(STATUS "link ${SARIBBON_LIB_NAME} PUBLIC QWindowKit::Widgets")
|
|||
|
endif()
|
|||
|
#################################################
|
|||
|
include(GNUInstallDirs)
|
|||
|
set_target_properties(${SARIBBON_LIB_NAME} PROPERTIES
|
|||
|
AUTOMOC ON
|
|||
|
AUTOUIC ON
|
|||
|
AUTORCC ON
|
|||
|
CXX_EXTENSIONS OFF
|
|||
|
DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}
|
|||
|
VERSION ${SARIBBON_VERSION}
|
|||
|
EXPORT_NAME ${SARIBBON_LIB_NAME}
|
|||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
|
|||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
|
|||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}"
|
|||
|
)
|
|||
|
# 构建库定义的宏,此宏必须为PRIVATE
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PRIVATE SA_RIBBON_BAR_MAKE_LIB)
|
|||
|
message(STATUS "macros predefined:#define SA_RIBBON_BAR_MAKE_LIB")
|
|||
|
# 使用SAColorWidgets但不作为库使用定义的宏,此宏必须为PRIVATE
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PRIVATE SA_COLOR_WIDGETS_MAKE_LIB)
|
|||
|
message(STATUS "macros predefined:#define SA_COLOR_WIDGETS_MAKE_LIB")
|
|||
|
if(_SARIBBON_USE_FRAMELESS_LIB)
|
|||
|
#使用frameless必须设置SARIBBON_USE_3RDPARTY_FRAMELESSHELPER宏为1,此宏必须为PUBLIC
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PUBLIC SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=1)
|
|||
|
message(STATUS "macros predefined:#define SARIBBON_USE_3RDPARTY_FRAMELESSHELPER 1")
|
|||
|
if(SARIBBON_ENABLE_SNAPLAYOUT)
|
|||
|
# 是否开启windows11的snap layout效果,目前这个在不同qt版本下有bug
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PUBLIC SARIBBON_ENABLE_SNAP_LAYOUT=1)
|
|||
|
message(STATUS "macros predefined:#define SARIBBON_ENABLE_SNAP_LAYOUT 1")
|
|||
|
else()
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PUBLIC SARIBBON_ENABLE_SNAP_LAYOUT=0)
|
|||
|
message(STATUS "macros predefined:#define SARIBBON_ENABLE_SNAP_LAYOUT 0")
|
|||
|
endif()
|
|||
|
else()
|
|||
|
#不使用frameless必须设置SARIBBON_USE_3RDPARTY_FRAMELESSHELPER宏为0,此宏必须为PUBLIC
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PUBLIC SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=0)
|
|||
|
message(STATUS "macros predefined:#define SARIBBON_USE_3RDPARTY_FRAMELESSHELPER 0")
|
|||
|
endif()
|
|||
|
|
|||
|
target_include_directories(${SARIBBON_LIB_NAME} PUBLIC
|
|||
|
$<INSTALL_INTERFACE:include/${SARIBBON_LIB_NAME}>
|
|||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
|
|||
|
)
|
|||
|
if(MSVC)
|
|||
|
# To unbreak std::min/max
|
|||
|
target_compile_definitions(${SARIBBON_LIB_NAME} PRIVATE NOMINMAX)
|
|||
|
message(STATUS "macros predefined:#define NOMINMAX")
|
|||
|
endif()
|
|||
|
|
|||
|
# ------------------------------- install script -------------------------------
|
|||
|
|
|||
|
# 头文件
|
|||
|
install(FILES
|
|||
|
${SARIBBON_HEADER_FILES}
|
|||
|
DESTINATION include/${SARIBBON_LIB_NAME}
|
|||
|
COMPONENT headers
|
|||
|
)
|
|||
|
# SAColorWidget的头文件
|
|||
|
install(FILES
|
|||
|
${SACOLOR_HEADER_FILES}
|
|||
|
DESTINATION include/${SARIBBON_LIB_NAME}/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 ${SARIBBON_LIB_NAME}_amalgamate
|
|||
|
)
|
|||
|
# 复制resource目录到install/amalgamate目录
|
|||
|
install(DIRECTORY
|
|||
|
${CMAKE_CURRENT_SOURCE_DIR}/resource
|
|||
|
DESTINATION ${SARIBBON_LIB_NAME}_amalgamate/SARibbonBar
|
|||
|
)
|
|||
|
# resource.qrc
|
|||
|
install(FILES
|
|||
|
${SARIBBON_RESOURCE_FILES}
|
|||
|
DESTINATION ${SARIBBON_LIB_NAME}_amalgamate/SARibbonBar
|
|||
|
)
|
|||
|
# 复制3rdparty目录到install/amalgamate目录
|
|||
|
install(DIRECTORY
|
|||
|
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty
|
|||
|
DESTINATION ${SARIBBON_LIB_NAME}_amalgamate/SARibbonBar
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
include(CMakePackageConfigHelpers)
|
|||
|
|
|||
|
# SARibbonBarConfig.cmake.in中,会让此变量和“${PACKAGE_PREFIX_DIR}/”进行拼接,也就是${PACKAGE_PREFIX_DIR}/@SARIBBON_LIB_INCLUDE_INSTALL_DIR@
|
|||
|
# PACKAGE_PREFIX_DIR等于${CMAKE_CURRENT_LIST_DIR}/../..
|
|||
|
# 最终变为${CMAKE_CURRENT_LIST_DIR}/../../include
|
|||
|
# 注意此处是替换,不要出现引号
|
|||
|
set(SARIBBON_LIB_INCLUDE_INSTALL_DIR include/${SARIBBON_LIB_NAME})
|
|||
|
write_basic_package_version_file(
|
|||
|
${CMAKE_CURRENT_BINARY_DIR}/${SARIBBON_LIB_NAME}ConfigVersion.cmake
|
|||
|
VERSION ${SARIBBON_VERSION}
|
|||
|
COMPATIBILITY SameMajorVersion
|
|||
|
)
|
|||
|
configure_package_config_file(
|
|||
|
"${CMAKE_CURRENT_SOURCE_DIR}/SARibbonBarConfig.cmake.in"
|
|||
|
"${CMAKE_CURRENT_BINARY_DIR}/${SARIBBON_LIB_NAME}Config.cmake"
|
|||
|
INSTALL_DESTINATION lib/cmake/${SARIBBON_LIB_NAME}
|
|||
|
PATH_VARS SARIBBON_LIB_INCLUDE_INSTALL_DIR
|
|||
|
)
|
|||
|
|
|||
|
install(TARGETS ${SARIBBON_LIB_NAME}
|
|||
|
EXPORT ${SARIBBON_LIB_NAME}Targets
|
|||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|||
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${SARIBBON_LIB_NAME}
|
|||
|
)
|
|||
|
install(EXPORT ${SARIBBON_LIB_NAME}Targets
|
|||
|
FILE ${SARIBBON_LIB_NAME}Targets.cmake
|
|||
|
NAMESPACE ${SARIBBON_LIB_NAME}::
|
|||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${SARIBBON_LIB_NAME}
|
|||
|
)
|
|||
|
|
|||
|
install(FILES
|
|||
|
"${CMAKE_CURRENT_BINARY_DIR}/${SARIBBON_LIB_NAME}Config.cmake"
|
|||
|
"${CMAKE_CURRENT_BINARY_DIR}/${SARIBBON_LIB_NAME}ConfigVersion.cmake"
|
|||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${SARIBBON_LIB_NAME}
|
|||
|
)
|
|||
|
|
|||
|
# 资源文件生成
|
|||
|
|
|||
|
if(WIN32)
|
|||
|
create_win32_resource_version(
|
|||
|
TARGET ${SARIBBON_LIB_NAME}
|
|||
|
FILENAME ${SARIBBON_LIB_NAME}
|
|||
|
EXT "dll"
|
|||
|
DESCRIPTION "Ribbon control library for Qt"
|
|||
|
)
|
|||
|
endif()
|