如何将子目录库与QMake链接?

bis*_*bis 8 c++ qt qmake

我有一个用QMake构建的Qt项目(称为"扫描仪"),我有2个子项目:一个名为"scannerlib"的静态库和一个使用该库的应用程序,称为"app"(目前,它只是一个主要的.cpp文件)

我的"scanner"文件夹包含文件scanner.pro:

QT += core testlib
QT -= gui

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

TEMPLATE = subdirs

SUBDIRS = app scannerlib

app.depends = scannerlib
Run Code Online (Sandbox Code Playgroud)

和两个子文件夹,包含.pro文件和源文件相关.scannerlib/scannerlib.pro:

TARGET = scannerlib
TEMPLATE = lib
CONFIG += staticlib

#I ommited SOURCES and HEADERS here for brevity
Run Code Online (Sandbox Code Playgroud)

app/app.pro:

TARGET = app
TEMPLATE = app
SOURCES = main.cpp
INCLUDEPATH += ../scannerlib
LIBS += -L../scannerlib -lscannerlib
Run Code Online (Sandbox Code Playgroud)

我成功构建了libscanner,但我无法在"app"中链接它.

错误:找不到-lscannerlib

检查后,libscannerlib.a已经成功构建,所以它应该不是问题.如果我删除-lscannerlib,我会得到一个未定义的引用.这似乎合法.

如果我将创建的"libscannerlib.a"从build文件夹移动到scanner/scannerll,这可以让qmake找到它,我可以获得成功的构建.

所以,问题看起来像是来自"-L ../ scannerlib".我应该用qmake在build文件夹中找到lib的方式放在那里?

Ale*_*lev 1

DESTDIR您可以在您的scannerlib和项目中使用app

Scannerlib/scannerlib.pro :

TARGET = scannerlib
TEMPLATE = lib
CONFIG += staticlib
DESTDIR = ../bin
Run Code Online (Sandbox Code Playgroud)

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

TARGET = app
TEMPLATE = app
SOURCES = main.cpp
DESTDIR = ../bin
INCLUDEPATH += ../scannerlib
LIBS *= -L$$OUT_PWD/$$DESTDIR -lscannerlib
Run Code Online (Sandbox Code Playgroud)