instAdmin/Cpp/GisDes/SaRibbon/SARibbonBar/CMakeLists.txt

290 lines
9.8 KiB
CMake
Raw Normal View History

2024-10-29 22:24:50 +08:00
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()