使用Qt-Creator,让我们假设我有这2个项目:
库/ C ++库
应用程序/ Qt控制台应用程序
我想以一种方式将库项目与应用程序项目链接起来,以便在构建后者时,编译器知道如何查找* .a和* .dll(如果在Linux中运行qt-creator,则可以找到* .so)。其他项目中的文件。我也想通过这种方式使用库中的标题:
#include <lib_example_header>
并且在构建项目时,编译器还知道如何找到正确的* .h文件。
任何人都知道该怎么做吗?
因此,假设我们有一个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是这里的简单方法。