Uso de cabeceras precompiladas
Las cabeceras precompiladas (PCH) son una característica de rendimiento soportada por algunos compiladores para compilar un cuerpo de código estable, y almacenar el estado compilado del código en un archivo binario. Durante las siguientes compilaciones, el compilador cargará el estado almacenado y continuará compilando el archivo especificado. Cada compilación posterior es más rápida porque el código estable no necesita ser recompilado.
qmake soporta el uso de cabeceras precompiladas en algunas plataformas y entornos de compilación, incluyendo:
- Windows
- nmake
- Proyectos de Visual Studio (VS 2008 y posteriores)
- macOS, iOS, tvOS y watchOS
- Makefile
- Xcode
- Unix
- GCC 3.4 y superior
- clang
Añadir cabeceras precompiladas a su proyecto
La cabecera precompilada debe contener código estable y estático en todo el proyecto. Una cabecera precompilada típica puede tener este aspecto:
// Add C includes here #if defined __cplusplus // Add C++ includes here #include <stdlib> #include <iostream> #include <vector> #include <QApplication> // Qt includes #include <QPushButton> #include <QLabel> #include "thirdparty/include/libmain.h" #include "my_stable_class.h" ... #endif
Nota: Un fichero de cabecera precompilado necesita separar los includes de C de los includes de C++, ya que el fichero de cabecera precompilado para ficheros C puede no contener código C++.
Opciones del proyecto
Para que su proyecto utilice cabeceras precompiladas, sólo necesita definir la variable PRECOMPILED_HEADER en su archivo de proyecto:
PRECOMPILED_HEADER = stable.h
qmake se encargará del resto, para garantizar la creación y el uso del archivo de cabecera precompilado. No es necesario incluir el archivo de cabecera precompilado en HEADERS, ya que qmake lo hará si la configuración admite cabeceras precompiladas.
Las especificaciones de MSVC y g++ para Windows permiten precompile_header por defecto.
Usando esta opción, puedes activar bloques condicionales en tu archivo de proyecto para añadir configuraciones cuando uses cabeceras precompiladas. Por ejemplo:
precompile_header:!isEmpty(PRECOMPILED_HEADER) {
DEFINES += USING_PCH
}Para utilizar la cabecera precompilada también para archivos C en el objetivo MSVC nmake, añada precompile_header_c a la variable CONFIG. Si la cabecera se utiliza también para C++ y contiene palabras clave/incluidos de C++, enciérrelos con #ifdef __cplusplus).
Notas sobre posibles problemas
En algunas plataformas, el sufijo del nombre de archivo de los archivos de cabecera precompilados es el mismo que el de otros archivos objeto. Por ejemplo, las siguientes declaraciones pueden hacer que se generen dos ficheros objeto diferentes con el mismo nombre:
PRECOMPILED_HEADER = window.h SOURCES = window.cpp
Para evitar posibles conflictos de este tipo, asigne nombres distintos a los archivos de cabecera que se precompilarán.
Proyecto de ejemplo
Puede encontrar el siguiente código fuente en el directorio examples/qmake/precompile de la distribución de Qt:
mydialog.ui
La siguiente imagen muestra el archivo mydialog.ui en el modo Diseño de Qt Creator. Puede ver el código en el modo Editar.

stable.h
/* Add C includes here */ #if defined __cplusplus /* Add C++ includes here */ # include <iostream> # include <QApplication> # include <QPushButton> # include <QLabel> #endif
myobject.h
#include <QObject> class MyObject : public QObject { public: MyObject(); ~MyObject(); };
myobject.cpp
#include <iostream> #include <QDebug> #include <QObject> #include "myobject.h" MyObject::MyObject() : QObject() { std::cout << "MyObject::MyObject()\n"; }
util.cpp
void util_function_does_nothing() { // Nothing here... int x = 0; ++x; }
main.cpp
#include <QApplication> #include <QPushButton> #include <QLabel> #include "myobject.h" #include "mydialog.h" int main(int argc, char **argv) { QApplication app(argc, argv); MyObject obj; MyDialog dialog; dialog.connect(dialog.aButton, SIGNAL(clicked()), SLOT(close())); dialog.show(); return app.exec(); }
precompile.pro
TEMPLATE = app LANGUAGE = C++ CONFIG += cmdline precompile_header # Use Precompiled headers (PCH) PRECOMPILED_HEADER = stable.h HEADERS = stable.h \ mydialog.h \ myobject.h SOURCES = main.cpp \ mydialog.cpp \ myobject.cpp \ util.cpp FORMS = mydialog.ui
© 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.