c++ - 如何将子目录库与 QMake 链接起来?

标签 c++ qt qmake

我有一个用 QMake 构建的 Qt 项目(称为“scanner”),其中有 2 个子项目:一个称为“scannerlib”的静态库和一个使用该库的应用程序,称为“app”(目前是只是一个 main.cpp 文件)

我的“扫描仪”文件夹包含文件 scanner.pro :

QT += core testlib
QT -= gui

CONFIG += c++14
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = subdirs

SUBDIRS = app scannerlib

app.depends = scannerlib

还有两个子文件夹,包含一个.pro文件和相关的源文件。 扫描仪库/扫描仪库.pro :

TARGET = scannerlib
TEMPLATE = lib
CONFIG += staticlib

#I ommited SOURCES and HEADERS here for brevity

应用程序/应用程序.pro :

TARGET = app
TEMPLATE = app
SOURCES = main.cpp
INCLUDEPATH += ../scannerlib
LIBS += -L../scannerlib -lscannerlib

我成功构建了 libscanner,但我无法在“app”中链接它。

error : cannot find -lscannerlib

经查看,libscannerlib.a已经构建成功,应该没有问题。 如果我删除 -lscannerlib,我会得到一个 undefined reference 。这似乎是合法的。

如果我将创建的“libscannerlib.a”从构建文件夹移动到 scanner/scannerlib,这允许 qmake 找到它,我可以获得成功的构建。

因此,问题看起来像是来自“-L../scannerlib”。我应该把什么放在那里,以便 qmake 在构建文件夹中找到 lib?

最佳答案

您可以在scannerlibapp 项目中使用DESTDIR

扫描仪库/扫描仪库.pro :

TARGET = scannerlib
TEMPLATE = lib
CONFIG += staticlib
DESTDIR = ../bin

应用程序/应用程序.pro :

TARGET = app
TEMPLATE = app
SOURCES = main.cpp
DESTDIR = ../bin
INCLUDEPATH += ../scannerlib
LIBS *= -L$$OUT_PWD/$$DESTDIR -lscannerlib

关于c++ - 如何将子目录库与 QMake 链接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681858/

相关文章:

css - 为什么我的 QWidget 样式表无法识别 objectName 规则?

qt - 从命令行构建 QML 应用程序(没有 Qt Creator)

android - 从命令行为 arm64 构建 Qt 项目

c++ - odbc 库在 ubuntu 上的位置

C++ "warning: returning reference to temporary "- 但它不是

c++ - Qt FrameBuffer 对象甚至不渲染顶点

linux - Qmake - 不在 Linux 中复制文件

c++ - C++封装基础知识

c++ - 如何处理 flex 中的嵌套注释

c++ - 无法使用 QMYSQL 部署 Qt 应用程序