我的项目结构如下:
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
部分,因为它与问题的基本表示无关。
2条答案
按热度按时间cl25kdpy1#
由于QCoreApplication位于Qt::Core模块中,因此您需要找到Qt Core并将演示链接到Qt::Core以及Qt::Widgets,这样
#include <QApplication>
将被解析icnyk63a2#
通过将
target_link_libraries(<library_name> Qt${QT_VERSION_MAJOR}::Widgets)
附加到OrderBook文件夹内的CMakeLists.txt的末尾以及导入OrderBook库的所有库,可以找到答案。