2012-12-04 12 views
5

ID mio: Visual Studio 2010, utilizzo il componente aggiuntivo Qt per VS, Qt ver. 4.8.1Come utilizzare le intestazioni precompilate nel progetto Qt

ho affrontato con il problema durante il tentativo di creare intestazione precompilata (PCH) nel mio progetto Qt.

Il mio approccio usuall per la creazione di PCH nel progetto non è Qt:
1. Creare intestazione;
2. Include i file che verranno precompilati nell'intestazione;
3. Per ogni file sorgente nello stato del progetto nelle sue proprietà se utilizzerà pch;
4. Per un file sorgente nella creazione dello stato del progetto di pch; 5. Includere pch in tutti i file di origine.

Come come azione non riuscita per il progetto Qt Ho deciso cosa succede perché pch dovrebbe essere incluso in tutti i file generati da MOC.

Ho letto l'articolo in QtAssistant su intestazioni precompilate e ho fatto quanto segue:
1. File di intestazione creato;
2. Per tutti i file cpp a impostare progetto uso opzione PCH e per un creare
3. convertito in qmake progetto generato
4. Ho corso qmake di file .pro -project
5. Ho modificato generato, eccolo è:

TEMPLATE = app 
TARGET = 
DEPENDPATH += . GeneratedFiles 
INCLUDEPATH += . 
PRECOMPILED_HEADER = StdAfx.h 
QT += network 

# Input 
HEADERS += server.h StdAfx.h 
FORMS += server.ui 
SOURCES += main.cpp server.cpp StdAfx.h.cpp 
RESOURCES += server.qrc 
  1. ho corse qmake
  2. di file .pro aperta e ha cercato di costruirla e ottenuto l'errore:

    di errore 2 Errore C1083: 'StdAfx.h':: Impossibile aprire il file includere No such file or directory

Quello che sto facendo male?

+0

Hai creato uno StdAfx.Il file h e al suo interno include tutte le intestazioni che vuoi precompilare? – drescherjm

+0

Sì, certo! Ho menzionato che ho creato il file .h, ma non ho dichiarato che è StdAfx.h –

risposta

3

Ho trovato la soluzione.
L'unica cosa che doveva essere fatto al fine di utilizzare un'intestazione precompilata nel progetto è quello comprendono le seguenti dichiarazioni nel file .pro:

CONFIG += nameOfPrecompiledHeader.h 
PRECOMPILED_HEADER = nameOfPrecompiledHeader.h 
win32-msvc* { 
PRECOMPILED_SOURCE = nameOfFileInWhichCreateOptionWillBeSet.cpp /* other .cpp files will be with use option*/ 
} 

dopo la modifica .pro e in esecuzione QMake tutti i file cpp volontà essere impostato per l'utilizzo di pch e uno per la sua creazione (nameOfFileInWhichCreateOptionWillBeSet) e .pch verrà generato

+0

ulteriore lettura: http://qt-project.org/doc/qt-4.8/qmake-precompiledheaders.html – Ich

+1

Vorrei per aggiungere un avviso qui che seguendo questo consiglio [può portare a problemi] (https://bugreports.qt.io/browse/QTBUG-44071). Il punto chiave credo sia che QMake generi automaticamente il tuo file sorgente precompilato per te per Visual Studio e quindi non devi crearne uno tu stesso come faresti con VS VS. – sjdowling

+0

Non funziona su Qt 5.5.0 (OSX). Usando CONFIG + = precompile_header come @Gordon Freeman indica che funziona. – Borzh

13

Creare il file di intestazione precompilato e includere le intestazioni desiderate.

pch.hpp:

// precompiled headers 

// add C includes here 

#ifdef __cplusplus 
// add C++ includes here 

#include <iostream> 
#include <QtGui> 

#endif // __cplusplus 

Poi nel file .pro:

CONFIG += precompile_header 
PRECOMPILED_HEADER = pch.hpp 
HEADERS += pch.hpp 

Qmake sarà ora impostare automaticamente le opzioni corrette per il compilatore.

+0

La tua risposta contiene nuove informazioni che non sono state trattate nella mia domanda o nella mia risposta? Qual è lo scopo della tua risposta? A chi ti stai rivolgendo? –

+5

@spin_eight La propria risposta fornisce la sintassi errata per l'aggiunta dell'intestazione precompilata al file .pro. L'opzione 'CONFIG' dovrebbe essere' precompile_header', non il nome del file di intestazione stesso. Anche l'opzione 'PRECOMPILED_SOURCE' non è documentata da nessuna parte. La mia risposta è corretta per quanto riguarda i documenti (e ha sempre funzionato bene per me). –

+6

@spin_eight Ti stai sbagliando. Piuttosto che ripetermi, ti collegherò semplicemente a [la documentazione pertinente] (http://qt-project.org/doc/qt-4.8/qmake-precompiledheaders.html) che fa esattamente quello che ho mostrato. –