使用qt-creator将库项目链接到qt控制台/窗口项目

问题描述 投票:0回答:1

使用Qt-Creator,让我们假设我有这2个项目:

  • 库/ C ++库

  • 应用程序/ Qt控制台应用程序

我想以一种方式将库项目与应用程序项目链接起来,以便在构建后者时,编译器知道如何查找* .a和* .dll(如果在Linux中运行qt-creator,则可以找到* .so)。其他项目中的文件。我也想通过这种方式使用库中的标题:

#include <lib_example_header>

并且在构建项目时,编译器还知道如何找到正确的* .h文件。

任何人都知道该怎么做吗?

qt qt-creator project
1个回答
0
投票
我们将使用cmake进行此操作,因为这是任何新项目都应使用的方法,它比qmake所需的三(3!)个项目文件要容易处理十倍。不值得。甚至,这也不是可转让的技能。

因此,假设我们有一个mylibrary静态库,该库将链接到myexe可执行文件。

您可以在任何编辑器(例如notepad ++)中创建此项目,然后在Qt Creator中将其打开,并从那时开始使用它。

# CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(test10 LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt5 COMPONENTS Widgets REQUIRED) add_library(mylibrary STATIC lib.cpp lib.h ) target_link_libraries(mylibrary PUBLIC Qt5::Core) target_include_directories(mylibrary PUBLIC .) add_executable(myexe main.cpp ) target_link_libraries(myexe PRIVATE Qt5::Widgets mylibrary)

该库提供了一个简单的getString()函数:

// lib.h #pragma once #include <QString> namespace lib { QString getString(); };

// lib.cpp
#include "lib.h"

namespace lib {
QString getString() {
   return QStringLiteral("Hello, world!");
}
}
可执行文件使用该功能显示一条消息:

#include <lib.h> #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMessageBox::information(nullptr, "Information", lib::getString()); }

这可能是实现它的最简单方法。我什至不愿意添加一个等效的qmake示例:您将需要三个.pro文件,并且没有自动方式链接子项目的输出。 CMake是这里的简单方法。
© www.soinside.com 2019 - 2024. All rights reserved.