在没有标头依赖项的情况下构建自定义库

Build custom library without header dependency

本文关键字:情况下 构建 自定义 依赖      更新时间:2023-10-16

我在Qt中做了一个小应用程序,用于发送和接收来自/接收来自/发送到RabbitMQ代理的消息。

我创建了一个包含 RabbitMQ 发布者和消费者的库,而 RabbitMQ 发布者和消费者又在这里使用 AMQP 库。现在每次我需要在应用程序中使用此库时,我都需要复制两个 .lib 文件(qamqp、RabbitMQLib),以及大约 10 个头文件,然后将它们添加到我的 .pro 文件中(通过 LIBSINCLUDEPATH )。

我在 C# 中做了一个类似的项目,但在那里我只需要两个 .dll,仅此而已。

我的问题是:我怎样才能用Qt做同样的事情?只需一两个 .lib 文件,这些文件将包含在需要它们的应用程序中,仅此而已,不需要 10 个额外的头文件。

你完全可以做到这一点。你实际上并不需要这些标头(使用它们只是有用的) - 你真正需要的是声明你实际使用的所有对象(类型、函数、变量)。所以,如果你有很多头,但只使用一个函数,你所需要的只是在实际使用它之前添加这个函数声明(可能是添加类似 __declspec(dllimport) 的东西,或者,如果使用 Qt - Q_DECL_IMPORT )。

但是,如果您面临的唯一问题是将所有这些文件添加到您的 pro-file,那么更好的解决方案是编写一个 pri-file,如下所示:

mylib.pri

INCLUDEPATH   += $$PWD/headers
DEPENDPATH    += $$PWD/headers
HEADERS += 
    $$PWD/headers/header1.h 
    ...
    $$PWD/headers/header10.h
LIBS += -L$$PWD/libs -lqamqp -lRabbitMQLib

并将其包含在您的专业文件中:

include($$PATH_TO_COMMON_LIBS/mylib/mylib.pri)