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:
- Ustaw swój projekt tak, aby używał wstępnie skompilowanych nagłówków z dyrektywą YU.
- Utwórz swój stdafx.plik h i ustaw go jako wstępnie skompilowany nagłówek.
- 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
4 answers
Ty stdafx.cpp powinno zawierać stdafx.h i być budowane przy użyciu /Yc"stdafx.h"
.
/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:
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):
// 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
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:
- 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"
- Wybierz a .plik cpp ma być źródłem nagłówka (z tego co wiem nie ma znaczenia który)
- Kliknij prawym przyciskiem myszy i wybierz Właściwości goto i wybierz "Utwórz" dla wstępnie skompilowanego nagłówka
- 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)
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ę.
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"
).
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