Autor Wątek: ZTS: Bug IntelliSense w VC++ 2008 i jego obejście  (Przeczytany 897 razy)

st3tc

  • Gość
# Lipiec 30, 2008, 15:07:06
Zrób To Sam - Odcinek 2 ;)

Temat: Problem poprawnej pracy IntelliSense w projektach z użyciem prekompilowanych nagłówków. Testowane na VC++ 2008.

Pewnie to oczywiste o czym tu napisałem, ale być może niektórym osobom się przyda :)


1. Syndromy

IntelliSense nie działa poprawnie w plikach źródłowych (*.c/*.cpp) znajdujących się w innym katalogu niż nasz nagłówek dla PCH.


2. Opis

Pliki c/cpp używające PCH mają obowiązek jako pierwszego #include podać nagłówek który został wcześniej skompilowany. Problem pojawia się, gdy źródełko leży w innym katalogu niż nasz nagłówek od PCH. Bez względu na lokalizację c/cpp musimy podać jedynie nazwę pliku h (bez ścieżki).

Przykład:
Plik cpp znajdujący się w tym samym katalogu co *.h dla PCH

#include "my_pch.h"
// coś tam

Plik cpp znajdujący się w katalogu  "sub" – podrzędnym do tego gdzie leży *.h dla PCH

#include "my_pch.h"
// coś tam 2

Te pliki skompilują się bez problemu, lecz problem pojawi się dla "ulepszonego" Intellisense Visuala :).  W danym pliku c/cpp IS wyświetla rzeczy, które ma dostarczone z nagłówków. Plik z katalogu "sub" ma problem – Intellisense nie odnajdzie "my_pch.h" i nic z niego nie pokaże.

Test:
Zmieniamy w pliku z katalogu "sub"

#include "../my_pch.h"
// coś tam 2

Po przekompilowaniu tego pliku zawartość "my_pch.h" stanie się widoczna dla Intellisense. Oczywiście plik nie skompiluje się – brak dołączonego prekompilowanego nagłówka. Po powrocie do poprzedniej wersji, okazuje się jednak, że ... Intellisense wciąż działa w tym pliku c/cpp :)


3. Rozwiązanie

Obejściem problemu jest wymuszenie dołączania pliku "my_pch.h" jako "zwykłego" nagłówka, podając ścieżkę do niego. Można to zrobić w opcjach kompilatora:

Cytuj
C/C++ -> Advanced -> ForceIncludes

Tam podajemy np. :

Cytuj
$(ProjectDir)Sources\my_pch.h

jesli plik my_pch.h jest w podkatalogu Sources – względem katalogu projektu.

Budujemy projekt i cieszymy się sprawnie działającym Intellisense ;). Nie uderzy to zbytnio w szybkość kompilacji – ponieważ jako pierwszy zostanie dołączony prekompilowany nagłówek, a drugie dołączenie zawartości "my_pch.h" zostanie pominięte.


Nie daję gwarancji, że rozwiąże to wszystkie problemy z IntelliSense, ale u mnie póki co IS działa sprawnie :)


Pozdr.
   st3tc
« Ostatnia zmiana: Lipiec 30, 2008, 17:29:09 wysłana przez st3tc »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych