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()
|