Question

J'ai deux projets Qt4 et une application GUI bibliothèque partagée projet, tous référencé dans un fichier .pro avec le modèle « de subdirs ». Donc, il est comme:

  • exampleapp.pro
    • app1.pro
    • app2.pro
    • sharedlib.pro

Maintenant, ce que je veux faire est sharedlib de référence de app1 et App2 afin que chaque fois que je lance app1.exe, je ne pas copier manuellement sharedlib.dll de son propre dossier dans le dossier de app1.exe.

Je pourrais définir la variable d'environnement PATH dans la fenêtre de projets, mais ce n'est pas très portable. Je l'ai regardé à mettre la variable LIBS dans le fichier app1.pro, mais je ne suis pas sûr si cela fait référence aux bibliothèques liées statiquement seulement - je l'ai essayé avec plusieurs syntaxes et il ne semble pas travailler avec libs partagées .

Était-ce utile?

La solution

Vous pouvez organiser votre projet comme suit:

  • Projet1
      bin
    • lib
    • app1
      • app2.pro
    • App2
      • app2.pro
    • sharedlib
      • sharedlib.pro

sharedlib.pro peut ajouter quelque chose comme ceci:

TEMPLATE = lib
TARGET = sharedlibr
QT + = core \
      gui
DESTDIR = .. / lib

DESTDIR: garantit que le résultat de la compilation sera copié à l'emplacement ".. / lib"

comme pour les applications App1 et App2:

TEMPLATE = app
TARGET = app1
QT + = core \
      gui
DESTDIR = .. / bin

ce que pour le développement, lors de la création du programme d'installation, les bibliothèques et les exécutables sont placés dans les dirs appropriés, en fonction du système d'exploitation.

Autres conseils

Pour ajouter à cela (un peu en retard!), On peut utiliser QMAKE_POST_LINK pour copier des fichiers autour après la construction est terminée. Exemple:

defineReplace(formatpath) {
    path = $$1

    win32 {
        return(\"$$replace(path, "/", "\\")\")
    } else:unix {
        return($$replace(path, " ", "\\ "))
    } else {
        error("Unknown platform in formatpath!")
    }
}

win32:COPY_CMD = copy
unix:COPY_CMD = cp -P
macx:COPY_CMD = cp -R

win32:CMD_SEP = $$escape_expand(\n\t)
unix:CMD_SEP = ";"

win32:LIB_EXT = dll
unix:LIB_EXT = so*
macx:LIB_EXT = dylib

# Put here the directory of your library's build dir, relative to the current directory
# A path is given for example...
MYLIB_BUILD_DIR = $$_PRO_FILE_PWD_/../lib/bin

QMAKE_POST_LINK += $$COPY_CMD $$formatpath($$MYLIB_BUILD_DIR/*.$$LIB_EXT) $$formatpath($$OUT_PWD/$$DESTDIR) $$CMD_SEP
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top