Wstępnie Skompilowane Nagłówki

Mam przykładowy projekt (nie mój), który jest w Visual C++ 6. Próbuję przekonwertować go do Visual Studio 2008.

Starszy projekt używa wstępnie skompilowanych nagłówków. Teraz pytania są:

  1. Czym są wstępnie skompilowane nagłówki?

  2. Ponieważ starszy projekt używa wstępnie skompilowanych nagłówków. Wykorzystam je również w Visual Studio 2008 (nowy projekt). Ale dostaję błędy mówiąc, że " zapomniałeś włączyć stdafx.h " , aby zaradzić problemowi, włączam "stdafx.h " w każdym pliku źródłowym. Zadziałało idealnie. Jednak starszy projekt nie zawierał "stdafx.w każdym pliku? W jaki sposób mogę zrezygnować z dołączania "stdafx.h " w każdym pliku źródłowym. Ponieważ nie każdy plik źródłowy potrzebuje plików nagłówkowych zdefiniowanych w " stdafx.h", tylko nieliczni tak robią. Jak to się robi?

EDYTUJ: JAK WYCZYŚCIĆ NIEKTÓRE PLIKI Z PRECOMPILOWANEGO NAGŁÓWKA?

Author: akif, 2009-08-18

3 answers

Czym są wstępnie skompilowane nagłówki?

Często pliki źródłowe C++ zawierają nagłówki z zewnętrznych bibliotek. W Windows dołączasz windows.h. Te pliki nagłówkowe mogą być bardzo duże, a ich przetwarzanie zajmuje trochę czasu. Za każdym razem, gdy kompilujesz plik C++, kompilator musi odczytać i przetworzyć tysiące linii z tych plików nagłówkowych. Ale zewnętrzne biblioteki się nie zmieniają i możesz zaoszczędzić dużo czasu, jeśli przetworzysz te pliki tylko raz i zapiszesz wynik.

A precompiled nagłówek jest po prostu zbiorem plików nagłówkowych, które zostały przetworzone do postaci pośredniej, która później może być używana przez kompilator ponownie i ponownie.

Wstępnie skompilowane nagłówki w Visual C++

W Visual C++ zwyczajowo #include Wszystkie nie zmieniające się pliki nagłówkowe w stdafx.h. Następnie zlecasz kompilatorowi tworzenie wstępnie skompilowanego nagłówka stdafx.pch podczas kompilacji stdafx.cpp, który nie robi nic poza dołączeniem stdafx.h. Jeśli chcesz użyć wstępnie skompilowanego nagłówka w innym pliku .cpp, musi zawierać stdafx.h jako pierwszy plik nagłówka i polecić kompilatorowi użycie stdafx.pch dla wstępnie skompilowanego nagłówka.

Jeśli pojawi się błąd dotyczący nieuwzględniania stdafx.h, musisz po prostu poinstruować kompilator, aby nie używał wstępnie skompilowanego nagłówka dla danego pliku źródłowego. (Lub możesz dołączyć stdafx.h.)

Wstępnie skompilowane ustawienia nagłówka dla poszczególnych plików źródłowych

Visual C++ pozwala kontrolować ustawienia kompilatora dla całego projektu i dla pojedyncze pliki. Aby uzyskać dostęp do poszczególnych właściwości wybierz plik źródłowy w Eksploratorze rozwiązań, kliknij go prawym przyciskiem myszy i wybierz właściwości Z menu kontekstowego. Opcje dla wstępnie skompilowanych nagłówków znajdują się we właściwościach konfiguracji => C / C++ => wstępnie skompilowane nagłówki . Jeśli zmodyfikujesz te ustawienia, często będziesz chciał to zrobić dla wszystkich konfiguracji (np. Debug i Release).

Kiedy używasz precompiled nagłówki będziesz miał ustawienie dla całego projektu, które nakazuje kompilatorowi użycie stdafx.pch dla wstępnie skompilowanego nagłówka. stdafx.cpp będzie miał indywidualne ustawienia, które instruują kompilator do generowania stdafx.pch, a jeśli masz pliki źródłowe, które nie zawierają stdafx.h, możesz ustawić indywidualne ustawienia na nich, aby nie używały wstępnie skompilowanych nagłówków.

 55
Author: Martin Liversage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 15:48:08

Kiedy kompilujesz kod, kompilator musi szukać we wszystkich nagłówkach#, aby wiedzieć, jak skompilować kod w Twoim .plik cpp.

W przypadku dużych projektów (lub tych, które używają bibliotek takich jak MFC) nagłówki te mogą stać się ogromne, a więc kompilowanie zajmuje dużo czasu.

Ponieważ większość z tych nagłówków nie zmienia się tak często (jeśli w ogóle), możesz zmusić kompilator do ich" prekompilowania " - przetwarza je i zapisuje swój stan do wstępnie skompilowanego nagłówka. Następnym razem, gdy kompiluje, nie potrzebuje aby odczytać i skompilować wszystkie te nagłówki ponownie, więc jest znacznie szybciej.

Jednym z wymagań w Visual Studio jest to, że jeśli używasz wstępnie skompilowanego nagłówka, musi on być zawarty w każdym pliku w projekcie.

Jeśli projekt jest mały lub nie budujesz go często, możesz po prostu wyłączyć opcję "wstępnie skompilowany nagłówek" (w ustawieniach projektu. Dotyczy to całego projektu). Jedyny efekt, jaki uzyskasz, to to, że może kompilować się wolniej. Lub pozostaw włączoną opcję i po prostu dodaj # include " stdafx.h " jako pierwszy zawierać w każdym pliku.

 4
Author: Jason Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-18 12:41:32
  1. Zobacz MSDN
  2. Zazwyczaj. musisz dołączyć "stdafx.h " w każdym pliku cpp. Chodzi o to, że są one wstępnie skompilowane i nie musisz się martwić, że nie wszystkie z nich są używane w jakimś konkretnym pliku.
 0
Author: bocco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-18 12:42:42