Frage

Ich habe zwei Qt4 GUI-Anwendung Projekte und ein geteilt Bibliotheksprojekt, die alle unter einer .pro-Datei mit der „subdirs“ Vorlage verwiesen. Also, es ist wie:

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

Nun, was ich tun möchte, ist Referenz sharedlib von app1 und app2 so, dass jedes Mal, wenn ich App1.exe laufen, ich muss nicht manuell sharedlib.dll von einem eigenen Ordner auf App1.exe Ordner kopieren.

Ich konnte Umgebungsvariable PATH im Projektfenster festgelegt, aber das ist nicht sehr tragbar. Ich habe bei setzt den LIBS-Variable in der app1.pro Datei gesucht, aber ich bin sicher nicht, ob das bezieht sich auf statisch gelinkte Bibliotheken nur - ich habe es mit verschiedenen Syntaxen versucht, und es scheint nicht mit gemeinsamem Libs zur Arbeit .

War es hilfreich?

Lösung

Sie können Ihr Projekt wie folgt organisieren:

  • Project1
    • ist
    • lib
    • app1
      • app2.pro
    • app2
      • app2.pro
    • sharedlib
      • sharedlib.pro

in sharedlib.pro etwas wie folgt hinzufügen:

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

DESTDIR: garantiert, dass das Ergebnis der Kompilierung wird auf den Standort kopiert werden „.. / lib“

für Anwendungen App1 und app2:

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

dies nur für die Entwicklung, wenn das Installationsprogramm erstellen, die Bibliotheken und ausführbaren Dateien in den entsprechenden Verzeichnissen gesetzt werden, abhängig vom Betriebssystem.

Andere Tipps

Um dies (ein bisschen spät!) Hinzufügen, kann man QMAKE_POST_LINK verwenden, um Dateien um zu kopieren, nachdem ein Build abgeschlossen ist. Beispiel:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top