如何将subdirs lib与qmake联系起来

How to link subdirs lib with QMake?

本文关键字:qmake 联系 起来 lib subdirs      更新时间:2023-10-16

i有一个使用Qmake构建的QT项目(称为" scanner"),在那里我有2个subprojects:一个称为" scannerlib"的静态库和一个使用该lib的应用程序,称为" 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文件和源文件相关。scannerlib/scannerlib.pro:

TARGET = scannerlib
TEMPLATE = lib
CONFIG += staticlib
#I ommited SOURCES and HEADERS here for brevity

app/app.pro:

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

我成功地构建了libscanner,但是我无法在"应用程序"中链接它。

错误:找不到-lscannerlib

检查后,libscannerlib.a已成功构建,因此这不是问题。如果我删除-lscannerlib,我会得到一个未定义的参考。这似乎是合法的。

如果我将创建的" libscannerlib.a"从构建文件夹移动到Scanner/Scannerlib,则可以成功构建,这允许Qmake找到它。

因此,问题似乎来自" -l ../scannerlib"。我应该以qmake在构建文件夹中找到lib的方式放置什么?

您可以在scannerlibapp项目中使用DESTDIR

scannerlib/scannerlib.pro:

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

app/app.pro:

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