En esta página

Funciones de prueba

Las funciones de prueba devuelven un valor booleano que puede comprobar en las partes condicionales de los ámbitos. Las funciones de prueba pueden dividirse en funciones incorporadas y bibliotecas de funciones.

Véase también Funciones de sustitución.

Funciones de prueba incorporadas

Las funciones de prueba básicas se implementan como funciones incorporadas.

cache(variablename, [set|add|sub] [transient] [super|stash], [source variablename])

Esta es una función interna que normalmente no necesitarás.

Esta función se introdujo en Qt 5.0.

CONFIG(config)

Esta función se puede utilizar para comprobar las variables colocadas en la variable CONFIG. Es lo mismo que scopes, pero tiene la ventaja añadida de que se puede pasar un segundo parámetro para comprobar la configuración activa. Como el orden de los valores es importante en CONFIG variables (es decir, el último conjunto se considerará la configuración activa para los valores mutuamente excluyentes) un segundo parámetro se puede utilizar para especificar un conjunto de valores a considerar. Por ejemplo:

CONFIG = debug
CONFIG += release
CONFIG(release, debug|release):message(Release build!) #will print
CONFIG(debug, debug|release):message(Debug build!) #no print

Dado que release se considera la configuración activa (para el análisis sintáctico de características) será la CONFIG utilizada para generar el fichero de compilación. En el caso común no se necesita un segundo parámetro, pero para pruebas específicas de exclusión mutua es muy valioso.

contiene(nombrevariable, valor)

Tiene éxito si la variable variablename contiene el valor value; en caso contrario falla. Es posible especificar una expresión regular para el valor del parámetro.

Puede comprobar el valor de retorno de esta función utilizando un ámbito.

Por ejemplo:

contains( drivers, network ) {
    # drivers contains 'network'
    message( "Configuring for network build..." )
    HEADERS += network.h
    SOURCES += network.cpp
}

El contenido del ámbito sólo se procesa si la variable drivers contiene el valor network. Si es así, se añaden los archivos correspondientes a las variables SOURCES y HEADERS.

count(nombrevariable, número)

Tiene éxito si la variable variablename contiene una lista con el valor number especificado; en caso contrario, falla.

Esta función se utiliza para garantizar que las declaraciones dentro de un ámbito sólo se procesen si la variable contiene el número correcto de valores. Por ejemplo

options = $$find(CONFIG, "debug") $$find(CONFIG, "release")
count(options, 2) {
    message(Both release and debug specified.)
}

debug(nivel, mensaje)

Comprueba si qmake se ejecuta en el nivel de depuración especificado. En caso afirmativo, devuelve true e imprime un mensaje de depuración.

defined(nombre[, tipo])

Comprueba si la función o variable name está definida. Si se omite type, comprueba todas las funciones. Para comprobar sólo variables o un tipo concreto de funciones, especifique type. Puede tener los siguientes valores:

  • test sólo comprueba las funciones de prueba
  • replace sólo comprueba funciones de sustitución
  • var sólo comprueba variables

equals(nombrevariable, valor)

Comprueba si variablename es igual a la cadena value.

Por ejemplo

TARGET = helloworld
equals(TARGET, "helloworld") {
    message("The target assignment was successful.")
}

error(cadena)

Esta función nunca devuelve un valor. qmake muestra string como mensaje de error al usuario y sale. Esta función sólo debe utilizarse para errores irrecuperables.

Por ejemplo:

error(An error has occurred in the configuration process.)

eval(cadena)

Evalúa el contenido de la cadena utilizando las reglas de sintaxis de qmake y devuelve true. Se pueden utilizar definiciones y asignaciones en la cadena para modificar los valores de las variables existentes o crear nuevas definiciones.

Por ejemplo:

eval(TARGET = myapp) {
    message($$TARGET)
}

Nota: Pueden utilizarse comillas para delimitar la cadena, y el valor de retorno puede descartarse si no es necesario.

existe(nombrearchivo)

Comprueba si existe un archivo con la dirección filename. Si el archivo existe, la función tiene éxito; en caso contrario, falla.

El argumento filename puede contener comodines. En ese caso, la función tendrá éxito si algún archivo coincide.

Por ejemplo:

exists( $(QTDIR)/lib/libqt-mt* ) {
      message( "Configuring for multi-threaded Qt..." )
      CONFIG += thread
}

Nota: "/" debe utilizarse como separador de directorios, independientemente de la plataforma utilizada.

export(nombrevariable)

Exporta el valor actual de variablename desde el contexto local de una función al contexto global.

for(iterar, lista)

Inicia un bucle que itera sobre todos los valores en list, estableciendo iterate a cada valor sucesivamente. Por conveniencia, si list es 1..10 entonces iterate iterará sobre los valores del 1 al 10.

Por ejemplo:

LIST = 1 2 3
for(a, LIST):exists(file.$${a}):message(I see a file.$${a}!)

Los bucles pueden interrumpirse con break(). La sentencia next() omite el resto del cuerpo del bucle y continúa la ejecución con la siguiente iteración.

mayorQue(nombrevariable, valor)

Comprueba si el valor de variablename es mayor que value. En primer lugar, esta función realiza una comparación numérica. Si al menos uno de los operandos no se convierte, esta función realiza una comparación de cadenas.

Por ejemplo:

ANSWER = 42
greaterThan(ANSWER, 1) {
    message("The answer might be correct.")
}

Es imposible comparar dos números como cadenas directamente. Como alternativa, construya valores temporales con un prefijo no numérico y compárelos.

Por ejemplo:

VALUE = 123
TMP_VALUE = x$$VALUE
greaterThan(TMP_VALUE, x456): message("Condition may be true.")

Véase también lessThan().

if(condición)

Evalúa condition. Se utiliza para agrupar expresiones booleanas.

Por ejemplo:

if(linux-g++*|macx-g++*):CONFIG(debug, debug|release) {
    message("We are on Linux or Mac OS, and we are in debug mode.")
}

include(nombrearchivo)

Incluye el contenido del archivo especificado por filename en el proyecto actual en el punto en el que se incluye. Esta función tiene éxito si filename está incluido; en caso contrario, falla. El fichero incluido se procesa inmediatamente.

Puede comprobar si el fichero se ha incluido utilizando esta función como condición para un ámbito. Por ejemplo

include( shared.pri )
OPTIONS = standard custom
!include( options.pri ) {
    message( "No custom build options specified" )
OPTIONS -= custom
}

infile(nombrearchivo, var, val)

Tiene éxito si el archivo filename (cuando es analizado por el propio qmake) contiene la variable var con un valor de val; de lo contrario falla. Si no se especifica val, la función comprueba si se ha asignado var en el archivo.

isActiveConfig

Es un alias de la función CONFIG.

isEmpty(nombrevariable)

Tiene éxito si la variable variablename está vacía; en caso contrario, falla. Equivale a count( variablename, 0 ).

Por ejemplo

isEmpty( CONFIG ) {
CONFIG += warn_on debug
}

isEqual

Es un alias de la función equals.

lessThan(nombrevariable, valor)

Comprueba si el valor de variablename es menor que value. Funciona como greaterThan().

Por ejemplo

ANSWER = 42
lessThan(ANSWER, 1) {
    message("The answer might be wrong.")
}

load(característica)

Carga el archivo de características (.prf) especificado por feature, a menos que la característica ya se haya cargado.

log(mensaje)

Imprime un mensaje en la consola. A diferencia de la función message, no añade texto ni saltos de línea.

Esta función se introdujo en Qt 5.0.

Véase también message().

mensaje(cadena)

Siempre tiene éxito, y muestra string como un mensaje general al usuario. A diferencia de la función error(), esta función permite que el proceso continúe.

message( "This is a message" )

La línea anterior hace que se escriba en la consola "Esto es un mensaje". El uso de comillas es opcional, pero recomendable.

Nota: Por defecto, los mensajes se escriben para cada Makefile generado por qmake para un proyecto dado. Si desea asegurarse de que los mensajes sólo aparecen una vez para cada proyecto, pruebe la variable build_pass junto con un ámbito para filtrar los mensajes durante las compilaciones. Por ejemplo

!build_pass:message( "This is a message" )

mkpath(dirRuta)

Crea la ruta del directorio dirPath. Esta función es una envoltura alrededor de la función QDir::mkpath.

Esta función se introdujo en Qt 5.0.

requiere(condición)

Evalúa condition. Si la condición es falsa, qmake omite este proyecto (y sus SUBDIRS) al construir.

Nota: También puede utilizar la variable REQUIRES para este propósito. Sin embargo, recomendamos el uso de esta función, en su lugar.

sistema(comando)

Ejecuta el comando command en un shell secundario. Tiene éxito si el comando devuelve un estado de salida cero; en caso contrario, falla. Puede comprobar el valor de retorno de esta función utilizando un ámbito.

Por ejemplo:

system("ls /bin"): HAS_BIN = TRUE

Véase también la variante replace de system().

touch(nombre_archivo, nombre_archivo_de_referencia)

Actualiza la marca de tiempo de filename para que coincida con la marca de tiempo de reference_filename.

Esta función se introdujo en Qt 5.0.

unset(nombre_variable)

Elimina variablename del contexto actual.

Por ejemplo:

NARF = zort
unset(NARF)
!defined(NARF, var) {
    message("NARF is not defined.")
}

versionAtLeast(variablename, versionNumber)

Comprueba que el número de versión de variablename es mayor o igual que versionNumber. Se considera que el número de versión es una secuencia de números decimales no negativos delimitada por '.'; se ignorará cualquier cola no numérica de la cadena. La comparación se realiza por segmentos de izquierda a derecha; si una versión es prefijo de la otra, se considera menor.

Esta función se introdujo en Qt 5.10.

versionAtMost(nombreVariable, númeroVersión)

Comprueba que el número de versión de variablename es menor o igual que versionNumber. Funciona como versionAtLeast().

Esta función se introdujo en Qt 5.10.

warning(cadena)

Siempre tiene éxito, y muestra string como mensaje de advertencia al usuario.

write_file(nombre_archivo, [nombre_variable, [modo]])

Escribe los valores de variablename en un archivo con el nombre filename, cada valor en una línea separada. Si no se especifica variablename, crea un archivo vacío. Si mode es append y el archivo ya existe, lo añade en lugar de reemplazarlo.

Esta función se introdujo en Qt 5.0.

Biblioteca de funciones de prueba

Las funciones de prueba complejas se implementan en una biblioteca de archivos .prf.

packagesExist(packages)

Utiliza el mecanismo PKGCONFIG para determinar si los paquetes dados existen o no en el momento de analizar el proyecto.

Esto puede ser útil para activar o desactivar funciones de forma opcional. Por ejemplo:

packagesExist(sqlite3 QtNetwork QtDeclarative) {
    DEFINES += USE_FANCY_UI
}

En el código

#ifdef USE_FANCY_UI
    // Use the fancy UI, as we have extra packages available
#endif

prepareRecursiveTarget(target)

Facilita la creación de objetivos para todo el proyecto similares al objetivo install preparando un objetivo que recorre todos los subdirectorios. Por ejemplo:

TEMPLATE = subdirs
SUBDIRS = one two three
prepareRecursiveTarget(check)

Los subdirectorios que tienen have_no_default o no_<target>_target especificado en su .CONFIG se excluyen de este objetivo:

two.CONFIG += no_check_target

Debe añadir manualmente el objetivo preparado a QMAKE_EXTRA_TARGETS:

QMAKE_EXTRA_TARGETS += check

Para que el objetivo sea global, el código anterior debe incluirse en cada subproyecto de subdirectorios. Además, para que estos objetivos hagan algo, los subproyectos que no sean subdirs necesitan incluir el código respectivo. La forma más fácil de conseguirlo es creando un fichero de características personalizado. Por ejemplo:

# <project root>/features/mycheck.prf
equals(TEMPLATE, subdirs) {
    prepareRecursiveTarget(check)
} else {
    check.commands = echo hello user
}
QMAKE_EXTRA_TARGETS += check

El archivo de características necesita ser inyectado en cada subproyecto, por ejemplo por .qmake.conf:

# <project root>/.qmake.conf
CONFIG += mycheck

Esta función se introdujo en Qt 5.0.

qtCompileTest(prueba)

Compila un proyecto de prueba. Si la prueba pasa, se devuelve true y se añade config_<test> a la variable CONFIG. En caso contrario, se devuelve false.

Para que esta función esté disponible, es necesario cargar el archivo de características correspondiente:

# <project root>/project.pro
load(configure)

Esto también establece la variable QMAKE_CONFIG_TESTS_DIR al subdirectorio config.tests del directorio padre del proyecto. Es posible anular este valor después de cargar el archivo de características.

Dentro del directorio de pruebas, debe haber un subdirectorio por prueba que contenga un proyecto qmake simple. El siguiente fragmento de código ilustra el archivo .pro del proyecto:

# <project root>/config.tests/test/test.pro
SOURCES = main.cpp
LIBS += -ltheFeature
# Note that the test project is built without Qt by default.

El siguiente fragmento de código ilustra el archivo .cpp principal del proyecto:

// <project root>/config.tests/test/main.cpp
#include <TheFeature/MainHeader.h>
int main() { return featureFunction(); }

El siguiente fragmento de código muestra la invocación de la prueba:

# <project root>/project.pro
qtCompileTest(test)

Si el proyecto de prueba se construye correctamente, la prueba pasa.

Los resultados de la prueba se almacenan automáticamente en caché, lo que también los pone a disposición de todos los subproyectos. Por lo tanto, se recomienda ejecutar todas las pruebas de configuración en el archivo de proyecto de nivel superior.

Para suprimir la reutilización de los resultados almacenados en caché, pase CONFIG+=recheck a qmake.

Véase también load().

Esta función se introdujo en Qt 5.0.

qtHaveModule(nombre)

Comprueba si el módulo Qt especificado por name está presente. Para obtener una lista de posibles valores, consulte QT.

Esta función se introdujo en Qt 5.0.1.

© 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.