¿Cómo construyo una biblioteca estática y ejecutable con Qt?

2 minutos de lectura

avatar de usuario de chacham15
chacham15

Para simplificar la situación, digamos que hay 2 archivos: core.cpp y main.cpp.

core.cpp contiene la funcionalidad del programa y main.cpp contiene lo basico main() implementación.

Quiero Qt (usando qmake y los archivos .pro) para

  • primera construcción core.a y entonces
  • usa eso y main.cpp para construir main.exe.

¿Cómo configuro esto en el archivo qmake?

Avatar de usuario de Masci
Masci

Diseño del sistema de archivos:

MyProject
|_ myproject.pro
|_ core
   |_ core.cpp
   |_ core.h
   |_ core.pro
|_ app
   |_ main.cpp
   |_ app.pro

miproyecto.pro:

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = core \
          app
app.depends = core

core.pro:

TEMPLATE = lib
CONFIG += staticlib
HEADERS = core.h
SOURCES = core.cpp

aplicación.pro:

TEMPLATE = app
SOURCES = main.cpp
LIBS += -L../core -lcore
TARGET = ../app-exe # move executable one dire up

  • Nitpick: Presionar reproducir da como resultado: Failed to start program. Path or permissions wrong?. ¿Cómo puedo solucionar esto? (Aparentemente está buscando el ejecutable en el directorio base)

    – chacham15

    5 de abril de 2012 a las 22:38


  • Simplemente mueva el ejecutable construido un directorio hacia arriba con TARGET var, vea la respuesta actualizada

    – Masci

    6 de abril de 2012 a las 7:34

  • INCLUDEPATH += ../core/ también debe exigirse en app.pro¿Correcto?

    – Jorge Leitao

    31 de mayo de 2016 a las 4:35

  • Cómo manejar el caso donde core.h incluye algo de una biblioteca Qt en particular, por ejemplo QT += websockets? no queremos app.pro tener que declarar dependencias explícitas en bibliotecas que solo se extraen indirectamente…

    – Tomás

    31 de agosto de 2016 a las 9:24

Si está utilizando recursos en su biblioteca estática, también debe importarlos en su aplicación. Q_INIT_RESOURCE es la forma de importar un archivo de recursos a la aplicación.

Suponga que tiene un archivo de recursos con el nombre de archivo como myResources.qrc en biblioteca estática. Luego, debe inicializar esto en la aplicación como se indica a continuación:

QApplication a(argc, argv);

Q_INIT_RESOURCE(resources); //Magic is here.

MainWindow w;
w.show();
a.exec();

El archivo .pro podría modificarse como se indica a continuación para el gran ejemplo dado por Masci:

TEMPLATE = lib
CONFIG += staticlib
HEADERS = core.h
SOURCES = core.cpp
RESOURCES += myResources.qrc

¿Ha sido útil esta solución?