Uso Avanzado
Añadir nuevas características de configuración
qmake le permite crear su propio features que se puede incluir en los archivos del proyecto mediante la adición de sus nombres a la lista de valores especificados por la variable CONFIG. Las características son colecciones de funciones personalizadas y definiciones en archivos .prf que pueden residir en uno de los muchos directorios estándar. Las ubicaciones de estos directorios se definen en varios lugares, y qmake comprueba cada uno de ellos en el siguiente orden cuando busca archivos .prf:
- En un directorio listado en la variable de entorno
QMAKEFEATURESque contiene una lista de directorios delimitados por el separador de lista de rutas de la plataforma (dos puntos para Unix, punto y coma para Windows). - En un directorio listado en la variable de entorno
QMAKEFEATURESque contiene una lista de directorios delimitados por el separador de la lista de rutas de la plataforma. - En un directorio de características que resida dentro de un directorio
mkspecs. Los directoriosmkspecspueden estar situados debajo de cualquiera de los directorios enumerados en la variable de entornoQMAKEPATHque contiene una lista de directorios delimitada por el separador de la lista de rutas de la plataforma. Por ejemplo:$QMAKEPATH/mkspecs/<features>. - En un directorio de características situado bajo el directorio proporcionado por la variable de entorno QMAKESPEC. Por ejemplo:
$QMAKESPEC/<features>. - En un directorio de funciones situado en el directorio
data_install/mkspecs. Por ejemplo:data_install/mkspecs/<features>. - En un directorio de funciones que exista como hermano del directorio especificado por la variable de entorno
QMAKESPEC. Por ejemplo:$QMAKESPEC/../<features>.
Se buscan archivos features en los siguientes directorios features:
features/unix,features/win32, ofeatures/macx, dependiendo de la plataforma en uso.features/
Por ejemplo, considere la siguiente asignación en un archivo de proyecto:
CONFIG += myfeatures
Con esta adición a la variable CONFIG, qmake buscará el archivo myfeatures.prf en las ubicaciones indicadas anteriormente una vez que haya terminado de analizar el archivo de proyecto. En sistemas Unix, buscará el siguiente archivo:
$QMAKEFEATURES/myfeatures.prf(para cada directorio listado en la variable de entornoQMAKEFEATURES)$$QMAKEFEATURES/myfeatures.prf(para cada directorio indicado en la variable de propiedadQMAKEFEATURES)myfeatures.prf(en el directorio raíz del proyecto). La raíz del proyecto viene determinada por el archivo de nivel superior.pro. Sin embargo, si coloca el archivo.qmake.cacheen un subdirectorio o en el directorio de un subproyecto, la raíz del proyecto pasa a ser el propio subdirectorio.$QMAKEPATH/mkspecs/features/unix/myfeatures.prfy$QMAKEPATH/mkspecs/features/myfeatures.prf(para cada directorio enumerado en la variable de entornoQMAKEPATH)$QMAKESPEC/features/unix/myfeatures.prfy$QMAKESPEC/features/myfeatures.prfdata_install/mkspecs/features/unix/myfeatures.prfydata_install/mkspecs/features/myfeatures.prf$QMAKESPEC/../features/unix/myfeatures.prfy$QMAKESPEC/../features/myfeatures.prf
Nota: Los archivos .prf deben tener nombres en minúsculas.
Instalación de archivos
Es común en Unix utilizar también la herramienta de compilación para instalar aplicaciones y librerías; por ejemplo, invocando a make install. Por esta razón, qmake tiene el concepto de un install set, un objeto que contiene instrucciones sobre la forma en que una parte de un proyecto debe ser instalado. Por ejemplo, una colección de archivos de documentación se puede describir de la siguiente manera:
documentation.path = /usr/local/program/doc documentation.files = docs/*
El miembro path informa a qmake que los archivos deben ser instalados en /usr/local/program/doc (el miembro path), y el miembro files especifica los archivos que deben ser copiados al directorio de instalación. En este caso, todo lo que se encuentre en el directorio docs se copiará en /usr/local/program/doc.
Una vez que un conjunto de instalación ha sido completamente descrito, puede añadirlo a la lista de instalación con una línea como esta:
INSTALLS += documentation
qmake se asegurará de que los archivos especificados se copien en el directorio de instalación. Si necesita más control sobre este proceso, también puede proporcionar una definición para el miembro extra del objeto. Por ejemplo, la siguiente línea indica a qmake que ejecute una serie de comandos para este conjunto de instalación:
unix:documentation.extra = create_docs; mv master.doc toc.doc
El ámbito unix garantiza que estos comandos concretos sólo se ejecuten en plataformas Unix. Los comandos apropiados para otras plataformas pueden definirse utilizando otras reglas de ámbito.
Los comandos especificados en el miembro extra se ejecutan antes de que se realicen las instrucciones de los demás miembros del objeto.
Si anexa un conjunto de instalación incorporado a la variable INSTALLS y no especifica los miembros files o extra, qmake decidirá qué debe copiarse por usted. Actualmente, se admiten los conjuntos de instalación target y dlltarget. Por ejemplo:
target.path = /usr/local/myprogram INSTALLS += target
En las líneas anteriores, qmake sabe lo que necesita ser copiado, y manejará el proceso de instalación automáticamente.
Añadir objetivos personalizados
qmake intenta hacer todo lo que se espera de una herramienta de compilación multiplataforma. Esto es a menudo menos que ideal cuando realmente necesita ejecutar comandos especiales dependientes de la plataforma. Esto se puede lograr con instrucciones específicas a los diferentes backends de qmake.
La personalización de la salida Makefile se realiza a través de una API de estilo objeto como se encuentra en otros lugares en qmake. Los objetos se definen automáticamente especificando sus miembros. Por ejemplo:
mytarget.target = .buildfile mytarget.commands = touch $$mytarget.target mytarget.depends = mytarget2 mytarget2.commands = @echo Building $$mytarget.target
Las definiciones anteriores definen un objetivo qmake llamado mytarget, que contiene un objetivo Makefile llamado .buildfile que a su vez se genera con el comando touch. Finalmente, el miembro .depends especifica que mytarget depende de mytarget2, otro objetivo que se define posteriormente. mytarget2 es un objetivo ficticio. Sólo se define para enviar algún texto a la consola.
El paso final es utilizar la variable QMAKE_EXTRA_TARGETS para indicar a qmake que este objeto es un objetivo a construir:
QMAKE_EXTRA_TARGETS += mytarget mytarget2
Esto es todo lo que necesitas hacer para construir objetivos personalizados. Por supuesto, es posible que desee vincular uno de estos objetivos a la meta de construcción qmake. Para ello, sólo tiene que incluir su objetivo Makefile en la lista de PRE_TARGETDEPS.
Las especificaciones de objetivos personalizados admiten los siguientes miembros:
| Miembro | Descripción |
|---|---|
| comandos | Los comandos para generar el objetivo de compilación personalizado. |
| CONFIG | Opciones de configuración específicas para el objetivo de compilación personalizado. Puede establecerse en recursive para indicar que deben crearse reglas en el Makefile para llamar al objetivo relevante dentro del Makefile específico del subobjetivo. Este miembro crea por defecto una entrada para cada uno de los subobjetivos. |
| depende | Los objetivos de compilación existentes de los que depende el objetivo de compilación personalizado. |
| recurse | Especifica qué subobjetivos deben utilizarse al crear las reglas en el Makefile para llamar al Makefile específico del subobjetivo. Este miembro sólo se utiliza cuando recursive está configurado en CONFIG. Los valores típicos son "Debug" y "Release". |
| recurse_target | Especifica el objetivo que debería construirse a través del Makefile de subobjetivo para la regla en el Makefile. Este miembro añade algo como $(MAKE) -f Makefile.[subtarget] [recurse_target]. Este miembro se utiliza sólo cuando recursive se establece en CONFIG. |
| objetivo | El nombre del objetivo de compilación personalizado. |
Añadir compiladores
Es posible personalizar qmake para soportar nuevos compiladores y preprocesadores:
new_moc.output = moc_${QMAKE_FILE_BASE}.cpp
new_moc.commands = moc ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
new_moc.depend_command = g++ -E -M ${QMAKE_FILE_NAME} | sed "s,^.*: ,,"
new_moc.input = NEW_HEADERS
QMAKE_EXTRA_COMPILERS += new_mocCon las definiciones anteriores, puede utilizar un reemplazo directo para moc si hay uno disponible. El comando se ejecuta en todos los argumentos dados a la variable NEW_HEADERS (desde el miembro input ), y el resultado se escribe en el archivo definido por el miembro output. Este archivo se añade a los demás archivos fuente del proyecto. Además, qmake ejecutará depend_command para generar información de dependencia, y colocar esta información en el proyecto también.
Las especificaciones personalizadas del compilador admiten los siguientes miembros:
| Miembro | Descripción |
|---|---|
| comandos | Los comandos utilizados para generar la salida a partir de la entrada. |
| CONFIG | Opciones de configuración específicas para el compilador personalizado. Consulte la tabla CONFIG para obtener más detalles. |
| comando_depend | Especifica un comando utilizado para generar la lista de dependencias para la salida. |
| tipo_dependencia | Especifica el tipo de archivo de salida. Si es un tipo conocido (como TYPE_C, TYPE_UI, TYPE_QRC), se trata como uno de esos tipos de archivos. |
| depende | Especifica las dependencias del archivo de salida. |
| entrada | La variable que especifica los archivos que deben procesarse con el compilador personalizado. |
| nombre | Una descripción de lo que hace el compilador personalizado. Sólo se utiliza en algunos backends. |
| salida | El nombre de archivo que se crea a partir del compilador personalizado. |
| función_de_salida | Especifica una función qmake personalizada que se utiliza para especificar el nombre de archivo que se creará. |
| variables | Indica que las variables especificadas aquí se sustituyen por $(QMAKE_COMP_VARNAME) cuando se hace referencia a ellas en el archivo pro como $(VARNAME). |
| variable_out | La variable a la que se añadirán los archivos creados a partir de la salida. |
El miembro CONFIG admite las siguientes opciones:
| Opción | Descripción |
|---|---|
| combinar | Indica que todos los archivos de entrada se combinan en un único archivo de salida. |
| target_predeps | Indica que la salida debe añadirse a la lista de PRE_TARGETDEPS. |
| dependencias_explícitas | Las dependencias para la salida sólo se generan desde el miembro depends y desde ningún otro lugar. |
| dep_existing_only | Se comprueba la existencia de cada dependencia que es resultado de .depend_command. Las dependencias no existentes se ignoran. Este valor se introdujo en Qt 5.13.2. |
| dep_líneas | La salida de .depend_command se interpreta como un archivo por línea. El valor predeterminado es dividir en espacios en blanco y se mantiene sólo por razones de compatibilidad con versiones anteriores. |
| no_link | Indica que la salida no debe añadirse a la lista de objetos a enlazar. |
Dependencias de bibliotecas
A menudo, cuando se vincula con una biblioteca, qmake confía en la plataforma subyacente para saber con qué otras bibliotecas se vincula esta biblioteca, y deja que la plataforma las introduzca. En muchos casos, sin embargo, esto no es suficiente. Por ejemplo, cuando se enlaza estáticamente una biblioteca, no se enlazan otras bibliotecas, y por lo tanto no se crean dependencias con esas bibliotecas. Sin embargo, una aplicación que más tarde se vincula con esta biblioteca tendrá que saber dónde encontrar los símbolos que la biblioteca estática requerirá. qmake intenta realizar un seguimiento de las dependencias de una biblioteca, en su caso, si se habilita explícitamente el seguimiento.
El primer paso es habilitar el seguimiento de dependencias en la propia biblioteca. Para ello debe decirle a qmake que guarde información sobre la biblioteca:
CONFIG += create_prl
Esto sólo es relevante para la plantilla lib, y será ignorado para todos los demás. Cuando esta opción está activada, qmake creará un archivo terminado en .prl que guardará alguna meta-información sobre la biblioteca. Este metafile es como un archivo de proyecto ordinario, pero sólo contiene declaraciones de variables internas. Al instalar esta librería, especificándola como objetivo en una declaración INSTALLS, qmake copiará automáticamente el archivo .prl a la ruta de instalación.
El segundo paso en este proceso es habilitar la lectura de esta meta información en las aplicaciones que utilizan la biblioteca estática:
CONFIG += link_prl
Cuando esto está habilitado, qmake procesará todas las bibliotecas vinculadas a la aplicación y encontrar su meta-información. qmake utilizará esto para determinar la información de vinculación pertinentes, en concreto la adición de valores a la lista del archivo de proyecto de aplicación de DEFINES, así como LIBS. Una vez qmake haya procesado este archivo, buscará las bibliotecas recién introducidas en la variable LIBS, y encontrará sus archivos .prl dependientes, continuando hasta que todas las bibliotecas hayan sido resueltas. En este punto, el Makefile se crea como de costumbre, y las bibliotecas se vinculan explícitamente contra la aplicación.
Los archivos .prl deben ser creados sólo por qmake, y no deben ser transferidos entre sistemas operativos, ya que pueden contener información dependiente de la plataforma.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.