Domanda

Ho due progetti Qt4 GUI dell'applicazione e un condiviso Progetto Biblioteche, tutto si fa riferimento in un file .pro con il modello "subdirs". Quindi, è come:

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

Ora, quello che voglio fare è sharedlib riferimento dal app1 e app2 in modo che ogni volta che corro App1.exe, non c'è bisogno di copiare manualmente sharedlib.dll da una propria cartella nella cartella di App1.exe.

ho potuto impostare PATH variabile di ambiente nella finestra di progetti, ma questo non è molto portabile. Ho guardato mettere la variabile LIBS nel file app1.pro, ma non sono sicuro se questo si riferisce alle sole librerie collegate staticamente - ho provato con diverse sintassi e non sembra di lavorare con librerie condivise .

È stato utile?

Soluzione

È possibile organizzare il vostro progetto come segue:

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

in sharedlib.pro può aggiungere qualcosa di simile:

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

DESTDIR: garanzie che il risultato della compilazione verrà copiato nella posizione ".. / lib"

Per quanto riguarda le applicazioni app1 e app2:

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

questo solo per lo sviluppo, quando si crea l'installatore, le librerie ed eseguibili vengono inseriti nelle dirs appropriati, a seconda del sistema operativo.

Altri suggerimenti

Per aggiungere a questo (un po 'tardi!), Si può usare QMAKE_POST_LINK per copiare i file in giro dopo un build è stata completata. Esempio:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top