Après un peu de frustration avec qmake, j'ai trouvé ce que je pense est la réponse à votre question. Si non, alors j'ai appris la façon dont je vais l'utiliser qmake jusqu'à ce que je trouve quelque chose de mieux, parce que c'est encore un peu laid. J'ai mis en place un projet de démonstration, c'est ma structure de répertoire (fichiers ont des extensions, les dossiers ne sont pas):
MyProj
MyProj.pro
myproj-core
myproj-core.pro
globals.h
MyProjCore.h
MyProjCore.cpp
myproj-app
myproj-app.pro
main.cpp
Nous commençons avec MyProj.pro
comme subdirs
du projet, qui est la clé pour faire ce que vous demandez. En gros, au lieu de dépendre d'autres projets pour spécifier debug/release et toutes autres sortes de cochonneries, vous venez de le mettre sur l'un qmake fichier. Il ne vous laisse pas faire uniquement ce dont vous avez besoin, mais c'est la meilleure solution que je pouvais venir. Voici le contenu:
TEMPLATE = subdirs
# Needed to ensure that things are built right, which you have to do yourself :(
CONFIG += ordered
# All the projects in your application are sub-projects of your solution
SUBDIRS = myproj-core \
myproj-app
# Use .depends to specify that a project depends on another.
myproj-app.depends = myproj-core
myproj-core.pro
est typique de votre shared object library:
QT -= gui
TARGET = myproj-core
TEMPLATE = lib
DEFINES += MYPROJCORE_LIBRARY
SOURCES += MyProjCore.cpp
HEADERS += MyProjCore.h \
globals.h
myproj-app.pro
des consommateurs de l'application, d'où le peu de reconstruire quand nécessaire truc, c'est:
QT -= gui
TARGET = myproj-app
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
# Specify that we're lookin in myproj-core. Realistically, this should be put
# in some configuration file
INCLUDEPATH += ../myproj-core
# Link to the library generated by the project. Could use variables or
# something here to make it more bulletproof
LIBS += ../myproj-core/libmyproj-core.so
# Specify that we depend on the library (which, logically would be implicit from
# the fact that we are linking to it)
PRE_TARGETDEPS += ../myproj-core/libmyproj-core.so
SOURCES += main.cpp
J'espère que cela résout votre problème, comme je sais qu'il a résolu le mien!
EDIT: j'ai fait un fichier spécialement pour la construction de dépendances pour moi, je le stocker dans un frère ou une sœur de dossier de chacun de mes projets (enfant de la MyProj dans la structure de répertoire spécifié ci-dessus) appelés dependencies.pri
:
# On windows, a shared object is a .dll
win32: SONAME=dll
else: SONAME=so
# This function sets up the dependencies for libraries that are built with
# this project. Specify the libraries you need to depend on in the variable
# DEPENDENCY_LIBRARIES and this will add
for(dep, DEPENDENCY_LIBRARIES) {
#message($$TARGET depends on $$dep ($${DESTDIR}/$${dep}.$${SONAME}))
LIBS += $${DESTDIR}/lib$${dep}.$${SONAME}
PRE_TARGETDEPS += $${DESTDIR}/lib$${dep}.$${SONAME}
}
Donc, au bas de toutes les applications qui consomment beaucoup, je peux ajouter les lignes:
DEPENDENCY_LIBRARIES = myproj-core
include(../config/dependencies.pri)
Cela suppose que vous copiez les bibliothèques de certains emplacement partagé et/ou de les déplacer comme nécessaire, donc ma fonction peut ne pas fonctionner pour vous, mais j'ai pensé que je voudrais ajouter à la solution.