Jak zaimplementować wstępnie skompilowane nagłówki do projektu

Rozumiem cel i rozumowanie precompilowanych nagłówków. Jakie są jednak zasady przy ich wdrażaniu? Z tego co wiem to idzie tak:

  1. Ustaw swój projekt tak, aby używał wstępnie skompilowanych nagłówków z dyrektywą YU.
  2. Utwórz swój stdafx.plik h i ustaw go jako wstępnie skompilowany nagłówek.
  3. Dołącz to jako oświadczenie Top include w każdym z Twoich .pliki H.

To prawda? Czy należy wykluczyć włączenie go w plikach, które są zawarte w wstępnie skompilowanym nagłówku? Obecnie dostaję następujący błąd kompilacji, gdy podążam za moją intuicją z tym:

Error C2857:' # include ' statement określony z /Ycstdafx.h opcja wiersza poleceń nie została znaleziona w plik źródłowy

Opcje wiersza poleceń są następujące:

/Od / I "../ External / PlatformSDK / Include " / I ".."/I"../ External / atlmfc / Include" /D "_DEBUG" / D "_UNICODE" / D " UNICODE" /Gm /EHsc /RTC1 /MDd / Yc"stdafx.h" / Fp"....\Output \ LudoCore\Debug \ LudoCore.pch" / Fo"....\Output\LudoCore\Debug\" / Fd"....\ Output \ LudoCore\Debug \ vc80.pdb" / W4 / WX / nologo /c / ZI / TP / wd4201 / errorReport: prompt

Author: Chris, 2009-10-12

4 answers

Ty stdafx.cpp powinno zawierać stdafx.h i być budowane przy użyciu /Yc"stdafx.h".

Twój drugi*.cpp powinno zawierać stdafx.h i być budowane przy użyciu /Yu"stdafx.h".

Zwróć uwagę na znaki podwójnego cudzysłowu używane w opcjach kompilatora!

Oto zrzut ekranu z ustawieniami Visual Studio dla stdafx.cpp do utworzenia wstępnie skompilowanego nagłówka:

Utwórz wstępnie skompilowany nagłówek

Oto odpowiednie opcje wiersza poleceń (które są tylko do odczytu, ale odzwierciedlają ustawienia określone na innych stronach; zauważ, że IDE wstawia znaki podwójnego cudzysłowu wokół nazwy pliku, w opcji kompilatora):

opcje

To jest to, co jest w moim stdafx.plik cpp:
// stdafx.cpp : source file that includes just the standard includes
// CallWinsock.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
 35
Author: ChrisW,
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-07-10 07:03:45

Visual studio może przechowywać wstępnie skompilowane właściwości nagłówka nie tylko według projektu, ale według pliku źródłowego.

Domyślnie wszystkie właściwości są ustawione na "inherit from parent or project defaults", które po prostu pokazuje wartość obiektu nadrzędnego dla tej właściwości, ale raz nadpisane na poziomie podrzędnym (w tym przypadku a .plik cpp) plik ignoruje zmiany z właściwości nadrzędnej.

Konfiguracja, którą chcesz to:

  1. na poziomie projektu z zaznaczeniem "wszystkie konfiguracje" (projekt Właściwości, zmień konfigurację rozwijaną z debug/release), Ustaw wstępnie skompilowany nagłówek na"użyj"
  2. Wybierz a .plik cpp ma być źródłem nagłówka (z tego co wiem nie ma znaczenia który)
  3. Kliknij prawym przyciskiem myszy i wybierz Właściwości goto i wybierz "Utwórz" dla wstępnie skompilowanego nagłówka
  4. W końcu upewnij się, że nie ma innych .pliki cpp mają wartości ustawione dla precompilowanej właściwości header (można je określić pogrubionym tekstem)
 10
Author: Spencer Rose,
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
2013-09-13 16:38:14

Twój #include "stdafx.h" powinien być pierwszą linią KAŻDEGO pliku cpp. Nie powinien być stosowany wpliki H. Poza tym masz rację.

 5
Author: Alan,
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-10-11 23:45:42

"stdafx" to tylko konwencja. To nie jest obowiązkowe. W rozwiązaniu wielu projektów użyłem innych konfiguracji z wieloma wstępnie skompilowanymi nagłówkami dla różnych części. Na przykład, może być przydatne, aby jeden PCH był współdzielony przez projekty interfejsu użytkownika, a drugi dla projektów baz danych.

Odpowiednie komponenty to plik X. h zawierający wstępnie skompilowane nagłówki, X.cpp plik, który zawiera tylko X. h (i nie dodaje samego kodu), a plik X. pch utworzony przez kompilację X.cpp (a więc X. h) z opcja kompilatora /Yc.

When you ' re now compiling Y.cpp Plik z /Yu"X.pch", kompilator odczytuje i odrzuca wszystko do #include "X.h". W tym momencie zastępuje swój wewnętrzny stan stanem zapisanym w X. pch, z wyjątkiem strumienia wejściowego (pozostaje Y.cpp, ze wskaźnikiem pliku ustawionym na następny wiersz po #include "X.h").

 5
Author: MSalters,
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
2015-11-17 16:13:34