簡體   English   中英

Qt6 桌面應用程序和共享庫與 cmake

[英]Qt6 desktop app and shared library with cmake

我正在嘗試使用 cmake 制作帶有子目錄的項目。 使用 qmake 時,此機制內置於 Qt creator 中。 該項目包含一個共享庫和一個桌面應用程序。 下面是項目的結構和我有的cmake:

主cmake:

cmake_minimum_required (VERSION 3.5)

project(contractapp)

add_subdirectory(contract-core)
add_subdirectory(contract-desktop)

桌面應用程序 cmake:


project(contract-desktop LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check https://doc.qt.io/qt/deployment-android.html for more information.
# They need to be set before the find_package( ...) calls below.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_package(contract-core REQUIRED)

set(PROJECT_SOURCES
        main.cpp
        MainWindow.cpp
        MainWindow.h
        MainWindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(contract-desktop
        ${PROJECT_SOURCES}
    )
else()
    if(ANDROID)
        add_library(contract-desktop SHARED
            ${PROJECT_SOURCES}
        )
    else()
        add_executable(contract-desktop
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(contract-desktop PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

共享庫 cmake:

cmake_minimum_required(VERSION 3.14)

project(contract-core LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)

add_library(contract-core SHARED
  contract-core_global.h
  Person.cpp
  Person.h
)

target_link_libraries(contract-core PRIVATE Qt${QT_VERSION_MAJOR}::Core)

target_compile_definitions(contract-core PRIVATE CONTRACTCORE_LIBRARY)

我的問題是桌面應用程序看不到我正在制作的庫。

該庫必須復制到應用程序所在的同一文件夾中。否則,每個庫都在其自己的文件夾中,應用程序將看不到它。 您很可能希望將兩個二進制文件(應用程序和庫)的目標文件夾設置為兩者的一些通用構建子文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM