tutorial quimica que linguist español descargar creator qt qmake

quimica - qt tutorial



Dependencias del proyecto Qmake(bibliotecas vinculadas) (5)

  1. Mira esta pregunta: Force relink al construir en QT Creator
  2. Intente agregar algo similar a este código a su archivo pro:

    CONFIG(debug, debug|release) { DESTDIR = ../../../bin/debug OBJECTS_DIR = ./debug } else { DESTDIR = ../../../bin/release OBJECTS_DIR = ./release }

Luego deberá especificar las dependencias para cada configuración:

CONFIG(debug, debug|release) { LIBS += -L../../../lib/debug / -L../../../bin/debug / -llib1 / -llib2 PRE_TARGETDEPS += ../../../lib/debug/liblib1.a / ../../../lib/debug/liblib2.a else { LIBS += -L../../../lib/release / -L../../../bin/release / -llib1 / -llib2 PRE_TARGETDEPS += ../../../lib/release/liblib1.a / ../../../lib/release/liblib2.a }

Tengo un proyecto que enlaza con una cantidad de bibliotecas compartidas.

Digamos que el proyecto A depende de los proyectos B y C

Idealmente, quiero imponer las siguientes dependencias en mi archivo de proyecto:

  1. Reconstruye el proyecto A si B o C han sido reconstruidos desde la última vez que se construyó el proyecto A
  2. Use la salida para la configuración relevante (es decir, si construye el proyecto A en modo de depuración, luego use las versiones de depuración de las libs para los proyectos B y C)

¿Alguien sabe cómo puedo expresar explícitamente tales dependencias en mi archivo de proyecto?


Después de un poco de frustración con qmake, he encontrado lo que creo que es la respuesta a su pregunta. Si no, entonces he aprendido la forma en que usaré qmake hasta que encuentre algo mejor, porque esto todavía es un poco feo. Configuré un proyecto de demostración, esta es mi estructura de directorios (los archivos tienen extensiones, las carpetas no):

MyProj MyProj.pro myproj-core myproj-core.pro globals.h MyProjCore.h MyProjCore.cpp myproj-app myproj-app.pro main.cpp

Comenzamos con MyProj.pro como un proyecto de subdirs , que es la clave para hacer lo que pide. Básicamente, en lugar de depender de otros proyectos para especificar depurar / liberar y todo tipo de otros elementos no deseados, simplemente configúralo en el único archivo qmake. No le permite hacer solo lo que necesita, pero es la mejor solución que podría encontrar. Aquí están los contenidos:

TEMPLATE = subdirs # Needed to ensure that things are built right, which you have to do yourself :( CONFIG += ordered # All the projects in your application are sub-projects of your solution SUBDIRS = myproj-core / myproj-app # Use .depends to specify that a project depends on another. myproj-app.depends = myproj-core

myproj-core.pro es su típica biblioteca de objetos compartidos:

QT -= gui TARGET = myproj-core TEMPLATE = lib DEFINES += MYPROJCORE_LIBRARY SOURCES += MyProjCore.cpp HEADERS += MyProjCore.h / globals.h

myproj-app.pro es una aplicación para el consumidor, donde el pequeño truco de reconstrucción cuando es necesario es:

QT -= gui TARGET = myproj-app CONFIG += console CONFIG -= app_bundle TEMPLATE = app # Specify that we''re lookin in myproj-core. Realistically, this should be put # in some configuration file INCLUDEPATH += ../myproj-core # Link to the library generated by the project. Could use variables or # something here to make it more bulletproof LIBS += ../myproj-core/libmyproj-core.so # Specify that we depend on the library (which, logically would be implicit from # the fact that we are linking to it) PRE_TARGETDEPS += ../myproj-core/libmyproj-core.so SOURCES += main.cpp

¡Espero que esto resuelva tu problema, ya que sé que resolvió el mío!

EDITAR : Hice un archivo específicamente para crear las dependencias para mí, lo guardo en una carpeta de hermanos de cada uno de mis proyectos (hijo de MyProj en la estructura de directorios especificada anteriormente) llamado dependencies.pri :

# On windows, a shared object is a .dll win32: SONAME=dll else: SONAME=so # This function sets up the dependencies for libraries that are built with # this project. Specify the libraries you need to depend on in the variable # DEPENDENCY_LIBRARIES and this will add for(dep, DEPENDENCY_LIBRARIES) { #message($$TARGET depends on $$dep ($${DESTDIR}/$${dep}.$${SONAME})) LIBS += $${DESTDIR}/lib$${dep}.$${SONAME} PRE_TARGETDEPS += $${DESTDIR}/lib$${dep}.$${SONAME} }

Entonces, en la parte inferior de todas las aplicaciones consumidoras, puedo agregar las líneas:

DEPENDENCY_LIBRARIES = myproj-core include(../config/dependencies.pri)

Esto supone que está copiando las bibliotecas en alguna ubicación compartida y / o moviéndolas según sea necesario, por lo que es posible que mi función no funcione para usted, pero pensé que la agregaría a la solución.


Para aquellos que están interesados ​​en una plantilla para su proyecto Qt / QML, he publicado una plantilla en GitHub QmlAppTemplate .


Tuve este problema cuando refactoricé mi proyecto, después de moverme en una nueva DLL (pqXDot) una clase reutilizable (de pqGraphviz).

Después de agregar una nueva DLL a mi proyecto y agregar la nueva referencia de DLL a otras DLL y aplicaciones que lo necesitaban, tuve en .pro principal:

TEMPLATE = subdirs SUBDIRS += / pqConsole / pqConsoleTest / pqSource / pqSourceTest / fdqueens / pqGraphviz / pqGraphvizTest / pqXDot

y la reconstrucción provocó un error del enlazador, porque pqGraphviz, la DLL que se está reestructurando, no puede encontrar pqXDot, la nueva DLL.

Resulta que es suficiente reordenar la lista SUBDIRS, moviendo la DLL requerida antes que la dependiente:

SUBDIRS += / pqConsole / pqConsoleTest / pqSource / pqSourceTest / fdqueens / pqXDot / pqGraphviz / pqGraphvizTest


Yo uso la solución a continuación. Esto funciona sin el uso de un archivo .pro adicional con plantilla de subdirectorio.

TEMPLATE = app TARGET = MyApp PRE_TARGETDEPS = ../../libs/MyLib/MyLib.a INCLUDEPATH += ../../libs/MyLib/include HEADERS += src/MyApp.h / ../../libs/MyLib/incude/MyLib.h SOURCES += src/MyApp.cpp LIBS += ../../libs/MyLib/MyLib.a MyLib.target = ../../libs/MyLib/MyLib.a MyLib.commands = cd ../../libs/MyLib && make MyLib.depends = ../../libs/MyLib/Makefile QMAKE_EXTRA_TARGETS += MyLib