6 votes

Comment lier les sous-répertoires lib avec QMake ?

J'ai un projet Qt (appelé "scanner") construit avec QMake, où j'ai 2 sous-projets : une librairie statique appelée "scannerlib" et une application utilisant cette librairie, appelée "app" (qui, pour l'instant, est juste un fichier main.cpp).

Mon dossier "scanner" contient le fichier scanner.pro :

QT += core testlib
QT -= gui

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

TEMPLATE = subdirs

SUBDIRS = app scannerlib

app.depends = scannerlib

Et deux sous-dossiers, contenant un fichier .pro et le fichier source correspondant. 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

J'ai réussi à construire libscanner, mais je ne peux pas le lier dans "app".

error : cannot find -lscannerlib

Après vérification, libscannerlib.a a été construit avec succès, donc il ne devrait pas y avoir de problème. Si je supprime -lscannerlib, j'obtiens une référence indéfinie. Ce qui semble légitime.

Je peux obtenir une construction réussie si je déplace la "libscannerlib.a" créée du dossier de construction vers scanner/scannerlib, ce qui permet à qmake de la trouver.

Ainsi, le problème semble provenir de "-L../scannerlib". Que dois-je mettre là de façon à ce que qmake trouve la librairie dans le dossier de construction ?

0voto

Vous pouvez utiliser DESTDIR dans vos deux scannerlib y app projets.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X