Ho un programma basato su Visual Studio C++ che utilizza intestazioni precompilate (stdafx.h
). Ora stiamo eseguendo il porting dell'applicazione su Linux usando gcc 4.x.Gestione di stdafx.h nel codice multipiattaforma
La domanda è come gestire l'intestazione precompilata in entrambi gli ambienti. Ho cercato su Google ma non riesco a concludere.
Ovviamente voglio lasciare stdafx.h
in Visual Studio poiché la base di codice è piuttosto grande e le intestazioni precompilate aumentano il tempo di compilazione.
Ma la domanda è cosa fare in Linux. Questo è quello che ho trovato:
- Lasciare il
stdafx.h
così com'è. gcc compila il codice considerevolmente più veloce di VC++ (o è solo la mia macchina Linux è più forte ... :)), quindi forse sono felice con questa opzione. Usa approccio da here - rendono
stdafx.h
assomigliare (impostatoUSE_PRECOMPILED_HEADER
solo per VS):#ifdef USE_PRECOMPILED_HEADER ... my stuff #endif
utilizzare l'approccio da here - compilare VC++ con
/FI
per implicitamente includonostdafx.h
in ogni file cpp. Pertanto in VS il tuo codice può essere cambiato facilmente per essere compilato senza intestazioni precompilate e nessun codice dovrà essere modificato.
Personalmente non mi piacciono le dipendenze e il pasticciostdafx.h
sta spingendo una grande base di codici verso. Quindi l'opzione mi piace - su Linux non haistdafx.h
, mentre sei ancora in grado di attivare le intestazioni precompilate su VS solo da/FI
.- Su Linux compilare
stdafx.h
solo come un'intestazione precompilata (mimica Visual Studio)
vostra opinione? Esistono altri approcci per trattare il problema?
rimuovere stdafx.h da dove? – dimba
Ho significava solo che dopo aver eseguito g ++ -c stdafx.h -o stdafx.h.gch, è possibile rimuovere stdafx.he compilation sarebbe ancora lavorare (g a.cpp ++). In realtà non lo faresti, ma l'ho menzionato come prova che sta usando l'intestazione precompilata. –
@ Brian Forse mi sbaglio, ma questo sembra l'opzione 4 ho elencato :) Ho provato a rimuovere stdafx.h da a.cpp e non ha compilato - intestazione precompilata verrà cercato solo se il file corrispondente di intestazione è incluso. L'ho confermato con strace :)). – dimba