From ea8870736698a1fe21be60d8b318a8227121663d Mon Sep 17 00:00:00 2001 From: Mentalflow <312902918@qq.com> Date: Sun, 9 Jul 2023 23:05:52 +0800 Subject: [PATCH] Add Build static lib option and fix the bug of static lib build. --- CMakeLists.txt | 2 ++ example/CMakeLists.txt | 22 ++++++++++++----- src/CMakeLists.txt | 54 +++++++++++++++++++++++++++++------------- 3 files changed, 56 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40225c5b..8966066b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ project(FluentUI VERSION 0.1 LANGUAGES CXX) option(FLUENTUI_BUILD_EXAMPLES "Build FluentUI demo applications." ON) option(FLUENTUI_BUILD_FRAMELESSHEPLER "Build FramelessHelper." ON) +option(FLUENTUI_BUILD_STATIC_LIB "Build static library." OFF) add_subdirectory(src) @@ -20,3 +21,4 @@ endif () message("------------------------ FluentUI ------------------------") message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}") message("Build FramelessHelper.: ${FLUENTUI_BUILD_FRAMELESSHEPLER}") +message("Build static library.: ${FLUENTUI_BUILD_STATIC_LIB}") diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 1eac8d36..4bd0ba3b 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -98,12 +98,22 @@ set_target_properties(example PROPERTIES ) #链接库 -target_link_libraries(example PRIVATE - Qt6::Quick - fluentuiplugin - FramelessHelper::Core - FramelessHelper::Quick -) +if (FLUENTUI_BUILD_STATIC_LIB) + target_link_libraries(example PRIVATE + Qt6::Quick + fluentui + fluentuiplugin + FramelessHelper::Core + FramelessHelper::Quick + ) +else() + target_link_libraries(example PRIVATE + Qt6::Quick + fluentuiplugin + FramelessHelper::Core + FramelessHelper::Quick + ) +endif() #安装 install(TARGETS example diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 85e38f70..36c61543 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,10 @@ cmake_minimum_required(VERSION 3.20) -project(fluentuiplugin LANGUAGES CXX) - +if (FLUENTUI_BUILD_STATIC_LIB) + project(fluentui LANGUAGES CXX) +else() + project(fluentuiplugin LANGUAGES CXX) +endif() #配置通用编译 set(CMAKE_CXX_STANDARD_REQUIRED ON) if(APPLE) @@ -52,22 +55,41 @@ foreach(filepath IN LISTS qml_files resource_files) endforeach() #添加qml模块 -qt_add_library(fluentuiplugin SHARED) -qt_add_qml_module(fluentuiplugin - #没有下面这行代码就会生成fluentuiplugin.dll与fluentuipluginplugin.dll两个动态库 - PLUGIN_TARGET fluentuiplugin - OUTPUT_DIRECTORY ${QML_PLUGIN_DIRECTORY} - VERSION 1.0 - URI "FluentUI" - #修改qmltypes文件名称。默认fluentuiplugin.qmltypes,使用默认名称有时候import FluentUI会爆红,所以修改成plugins.qmltypes - TYPEINFO "plugins.qmltypes" - SOURCES ${sources_files} fluentui.rc - QML_FILES ${qml_files} - RESOURCES ${resource_files} -) +if (FLUENTUI_BUILD_STATIC_LIB) + set(LIB_TYPE "STATIC") +else() + set(LIB_TYPE "SHARED") +endif() +qt_add_library(${PROJECT_NAME} ${LIB_TYPE}) +if (FLUENTUI_BUILD_STATIC_LIB) + qt_add_qml_module(${PROJECT_NAME} + #在静态库编译中使用PLUGIN_TARGET会导致链接失败 + OUTPUT_DIRECTORY ${QML_PLUGIN_DIRECTORY} + VERSION 1.0 + URI "FluentUI" + #修改qmltypes文件名称。默认fluentuiplugin.qmltypes,使用默认名称有时候import FluentUI会爆红,所以修改成plugins.qmltypes + TYPEINFO "plugins.qmltypes" + SOURCES ${sources_files} fluentui.rc + QML_FILES ${qml_files} + RESOURCES ${resource_files} + ) +else() + qt_add_qml_module(${PROJECT_NAME} + #没有下面这行代码就会生成fluentuiplugin.dll与fluentuipluginplugin.dll两个动态库 + PLUGIN_TARGET fluentuiplugin + OUTPUT_DIRECTORY ${QML_PLUGIN_DIRECTORY} + VERSION 1.0 + URI "FluentUI" + #修改qmltypes文件名称。默认fluentuiplugin.qmltypes,使用默认名称有时候import FluentUI会爆红,所以修改成plugins.qmltypes + TYPEINFO "plugins.qmltypes" + SOURCES ${sources_files} fluentui.rc + QML_FILES ${qml_files} + RESOURCES ${resource_files} + ) +endif() #链接库 -target_link_libraries(fluentuiplugin PUBLIC +target_link_libraries(${PROJECT_NAME} PUBLIC Qt::CorePrivate Qt::QuickPrivate Qt::QmlPrivate