Qual è il modo più semplice per fare riferimento le librerie Qt in progetti?
-
03-10-2019 - |
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 .
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