[英]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.