La risposta alla domanda originale è che lo scopo di avere #pragma hdrstop in un file con/Yc o/Yu set è che è ignorato e quindi è possibile impostare una configurazione di build che costruisca senza intestazioni precompilate e altro crea configurazioni che creano intestazioni precompilate e non è necessario modificare il codice o le intestazioni incluse per farlo.
Più dettagli ...
Le note su MSDN dicono che "Il pragma hdrstop offre un controllo aggiuntivo sui nomi dei file di precompilazione e sulla posizione in cui lo stato della compilazione viene salvato." Il che è vero, ma non è particolarmente evidente esattamente come utili che possono essere ...
In poche parole.
- L'inserimento di #pragma hdrstop in un file di origine non compilato con/Yc o/Yu non ha alcun effetto.
- Se hai/Yu impostare per il file quindi hdrstop dice al compilatore di buttare via tutto prima la linea sulla quale appare hdrstop e inserire l'intestazione precompilata invece.
- Se/Yc è impostato per il file allora hdrstop significa salvare tutto lo stato compilato per tutto fino alla riga su cui hdrstop appare come intestazione precompilata.
Il trucco sta utilizzando/Yc e/Yu senza il nome del file di intestazione opzionale; basta selezionare il pulsante di opzione "usa" o "crea" e lasciare vuota la casella di testo "Intestazione passante" (o modificare il file di progetto ...).
Quindi si ha 1 file, eventualmente chiamato PrecompiledHeader.cpp che include le intestazioni che si desidera includere nell'intestazione precompilata e che ha #pragma hdrstop alla fine dell'elenco dei file di inclusione. Questo file ONE è compilato con/Yc.
Devi quindi tutti gli altri file cpp con #pragma hdrstop dopo la includono i file che si trovano nella vostra intestazione precompilata. Questi file sono tutti compilati con/Yu.
Questo si traduce in PrecompiledHeader.cpp costruire la vostra (in questo esempio) singolo file PCH e tutti gli altri file utilizzando il file singolo pch.
Il vantaggio di questa operazione è che nessuno dei vostri file devono includere un 'globale' intestazione del file di intestazione precompilata edificio - quindi non stdafx.h o qualsiasi altra cosa. Ciò significa che è possibile impostare una configurazione di build che genera SENZA intestazioni precompilate in cui tutte le righe di #pragma hdrstop vengono semplicemente ignorate.
Questo è "buono" perché significa che è possibile avere una configurazione di configurazione "senza precomp" singola che consente di sviluppare rapidamente (è possibile modificare una singola intestazione e NON forzare la ricostruzione del mondo) e altre configurazioni "normali" che DO usa intestazioni precompilate.
fonte
2013-07-04 12:44:14
Grazie. Grazie mille! ... Ora, hmm ... * "Poi hai tutti gli altri tuoi file cpp con #pragma hdrstop dopo i file di inclusione che sono nell'intestazione precompilata." * - questo significa che gli altri file devono sapere cosa c'è nel intestazione precompilata in modo che possano dividere i loro include prima e dopo la linea hdrstop? –
Funziona meglio se lo fai. Ma tu non devi. Avrai errori di compilazione nelle tue build precomp se hai un file che si trova sopra il #pragma hdrstop che non si trova nell'intestazione precompilata. Puoi quindi decidere se è usato abbastanza ampiamente da meritare di essere nel precomp o no. –