¿Cuál es la manera más fácil de hacer referencia a las bibliotecas en los proyectos de Qt?

StackOverflow https://stackoverflow.com/questions/2870637

Pregunta

Tengo dos proyectos Qt4 aplicación con interfaz gráfica y un compartida proyecto de la biblioteca, todos los que se hace referencia en virtud de un archivo .pro con la plantilla "subdirectorios". Por lo tanto, es como:

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

Ahora, lo que yo quiero hacer es sharedlib de referencia desde app1 y app2 de manera que cada vez que ejecute APP1.EXE, no tengo que copiar manualmente sharedlib.dll de su propia carpeta a carpeta de APP1.EXE.

Me podía establece la variable de entorno PATH en la ventana de proyectos, pero esto no es muy portátil. He mirado en poner la variable LIBS en el archivo app1.pro, pero no estoy seguro de si eso se refiere sólo a las bibliotecas enlazadas estáticamente - Lo he intentado con diversas sintaxis y no parece trabajar con bibliotecas compartidas .

¿Fue útil?

Solución

Se puede organizar el proyecto de la siguiente manera:

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

en sharedlib.pro puede añadir algo como esto:

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

DESTDIR: garantiza que el resultado de la compilación se copiará en la ubicación ".. / lib"

En cuanto a las aplicaciones App1 y app2:

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

esto sólo para el desarrollo, al crear el instalador, las bibliotecas y los archivos ejecutables se colocan en los directorios apropiados, dependiendo del sistema operativo.

Otros consejos

Para añadir a esto (un poco tarde!), Se puede utilizar para copiar archivos QMAKE_POST_LINK alrededor después de una acumulación se ha completado. Ejemplo:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top