5

Co próbuję zrobić, to skonfigurować projekt, w którym nie ma znaczenia, czy ustawiony jest prekompilowany nagłówek, czy nie. stdafx.hpp to moja P.H.Konfigurowanie projektu, który kompilowałby się zarówno z prekompilowanym nagłówkiem, jak i bez niego.

Moim głównym problemem jest to, że mam pliki ponad wieloma katalogami, nie tylko katalogiem głównym projektu. Co mają tryed:

  1. Gdybym

    #include "stdafx.hpp" 
    

    wszędzie działa dobrze z zestawu PH, ale byłoby narzekać gdybym go wyłączyć, ponieważ pliki w podkatalogach coudn't go znaleźć.

  2. Gdybym

    #include "../stdafx.hpp" 
    

    w plikach znajdujących się w podkatalogu, to działa dobrze bez PH, ale z PH, kompilator narzeka stdafx.hpp nie są wliczone w cenę.

  3. Jeśli ustawię siłę, włącz plik do stdafx.hpp, albo ze ścieżką względną, albo bezwzględną, kompilator dał mi błędy (nie mogę tego teraz zapamiętać, jeśli to konieczne, powielę je).

Co może być rozwiązaniem?

Odpowiedz

6

Rozwiązanie kanoniczne jest proste: nie dołączaj wstępnie skompilowanego pliku nagłówkowego (domyślnie: stdafx.h). Jeśli Twój kod musi skompilować z nagłówkami prekompilowanymi, użyj przełącznika /FI (Name Forced Include File) kompilatora:

Ta opcja ma taki sam efekt jak określając plik z podwójnym cudzysłowie w dyrektywie #include na pierwszej linii każdego pliku źródłowego określonego w linii poleceń, w zmiennej środowiskowej CL lub w pliku poleceń.

Umożliwia to użycie wstępnie skompilowanych plików nagłówkowych bez modyfikowania kodu źródłowego.

Zasady korzystania dyrektywę #include z podwójnym cudzysłowie są przedstawione poniżej #include Directive (C/C++):

Cytowany forma:

preprocesora wyszukuje dla zawierać pliki w następującej kolejności:

  1. W tym samym katalogu, co plik zawierający instrukcję #include.
  2. W katalogach aktualnie otwartych plików uwzględniono w odwrotnej kolejności, w jakiej zostały otwarte. Wyszukiwanie rozpoczyna się w katalogu nadrzędnego pliku włączającego i kontynuuje w górę w katalogach wszystkich plików dołączanych do plików dodatkowych.
  3. Wzdłuż ścieżki określonej przez każdą opcję kompilatora/I.
  4. Wzdłuż ścieżek określonych przez zmienną środowiskową INCLUDE.

Korzystanie przełącznik /I (Additional Include Directories) kompilatora zawierać katalog pliku nagłówka użyte do wygenerowania prekompilowanego nagłówek będzie wtedy po prostu pozwala na pisanie

/FIstdafx.hpp 

Nie ma kombinacja ustawień/topologia projekt to pozwoli ci na włączanie i wyłączanie prekompilowanych nagłówków. Przełączniki kompilatora /Y,/FI i/I muszą być używane razem lub całkowicie usunięte. Aby zmienić zestaw konfiguracji jako jednostkę, możesz użyć stron właściwości (szczegóły: Working with Project Properties).

1

Łatwym rozwiązaniem byłoby skonfigurowanie ścieżek dołączania do projektu, aby zwykły #include "stdafx.hpp" zawsze znajdował nagłówek, niezależnie od katalogu zawierającego plik.

Jeśli martwisz się niechcianym tworzeniem plików nagłówkowych w innych katalogach, możesz nawet umieścić potencjalnie skompilowany nagłówek w swoim specjalnym katalogu.

Powiązane problemy