Qt库在使用CMake编译时不可用于MySQL库,但可用于主目录可执行文件

cclgggtu  于 4个月前  发布在  Mysql
关注(0)|答案(2)|浏览(86)

我的项目结构如下:

CMakeLists.txt
main.cpp
Build/
OrderBook/
    CmakeLists.txt
    OrderBook.cpp
    OrderBook.hpp

字符串
以下是CSCMakeLists.txt的内容:

cmake_minimum_required(VERSION 3.5)
project(OrderBookDemo)

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(SQLite3 REQUIRED)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(SOURCE_FILES main.cpp)
add_executable(OrderBookDemo ${SOURCE_FILES})

include_directories(OrderBook)

add_subdirectory(OrderBook)

target_link_libraries(OrderBookDemo OrderBook DBHandler Qt${QT_VERSION_MAJOR}::Widgets SQLite::SQLite3 )


以下是 OrderBook 文件夹中CMakeLists.txt的内容:

project (OrderBook)
add_definitions(-std=c++14)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(HEADER_FILES OrderBook.hpp)
set(SOURCE_FILES OrderBook.cpp)

add_library(OrderBook STATIC ${SOURCE_FILES} ${HEADER_FILES})


有趣的是,当我将#include <sqlite3.h添加到OrderBook.hpp时,项目成功编译。
然而,当我将#include <QApplication>添加到OrderBook.hpp时,我在使用cmake --build .编译时得到一个错误。

In file included from /Users/shreyashonnalli/desktop/Group Project/GroupRepo/DBHandler/DBHandler.cpp:8:
In file included from /Users/shreyashonnalli/desktop/Group Project/GroupRepo/DBHandler/DBHandler.hpp:14:
/Users/shreyashonnalli/desktop/Group Project/GroupRepo/OrderBook/OrderBook.hpp:11:10: fatal error: 'QApplication' file not found
#include <QApplication>
         ^~~~~~~~~~~~~~
1 error generated.


此外,当我将#include <QApplication>#include <sqlite3.h添加到main.cpp时,它仍然可以编译。这告诉我,main.cpp可以使用外部库,但OrderBook/文件只能使用sqlite3。
为什么会发生这种情况?我如何使Qt也可以用于子目录?
请忽略代码的DBHandler部分,因为它与问题的基本表示无关。

cl25kdpy

cl25kdpy1#

由于QCoreApplication位于Qt::Core模块中,因此您需要找到Qt Core并将演示链接到Qt::Core以及Qt::Widgets,这样#include <QApplication>将被解析

icnyk63a

icnyk63a2#

通过将target_link_libraries(<library_name> Qt${QT_VERSION_MAJOR}::Widgets)附加到OrderBook文件夹内的CMakeLists.txt的末尾以及导入OrderBook库的所有库,可以找到答案。

相关问题