Visual C ++: #include pliki z innych projektów w tym samym rozwiązaniu

113

Pracuję nad grą w języku Visual C ++. Mam kilka komponentów w oddzielnych projektach i ustawiłem zależności projektu. Jak # Uwzględnić plik nagłówkowy z innego projektu? Nie mam pojęcia, jak używać zajęć z jednego projektu w innym.

rlbond
źródło

Odpowiedzi:

200

Ustawienia kompilatora

W projekcie, w którym chcesz # uwzględnić plik nagłówkowy z innego projektu, musisz dodać ścieżkę pliku nagłówkowego do dodatkowych katalogów dołączania w konfiguracji projektu.

Aby uzyskać dostęp do konfiguracji projektu:

  1. Kliknij projekt prawym przyciskiem myszy i wybierz opcję Właściwości.
  2. Wybierz Właściwości konfiguracji-> C / C ++ -> Ogólne.
  3. Ustaw ścieżkę w sekcji Dodatkowe dołączane katalogi.

Jak dołączyć

Aby dołączyć plik nagłówkowy , po prostu napisz w swoim kodzie:

#include "filename.h"

Zwróć uwagę, że nie musisz tutaj określać ścieżki, ponieważ katalog został już uwzględniony w dodatkowych katalogach dołączania, więc program Visual Studio będzie wiedział, gdzie go szukać.

Jeśli nie chcesz dodawać każdej lokalizacji pliku nagłówkowego w ustawieniach projektu, możesz po prostu dołączyć katalog do jednego punktu, a następnie #include względem tego punktu:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

Ustawienie dla konsolidatora

Jeśli używasz bibliotek statycznych (np. Plik .lib), będziesz musiał również dodać bibliotekę do wejścia konsolidatora, aby w czasie łączenia symbole mogły być połączone (w przeciwnym razie otrzymasz nierozwiązany symbol):

  1. Kliknij projekt prawym przyciskiem myszy i wybierz opcję Właściwości.
  2. Wybierz Właściwości konfiguracji-> Konsolidator-> Dane wejściowe
  3. Wejdź do biblioteki w sekcji Dodatkowe zależności.
LeopardSkinPillBoxHat
źródło
6
Mogę tylko powiedzieć, że po porannym czytaniu odpowiedzi na ten temat w SO, twoje w najbardziej przejrzystym i wyczerpującym, z jakim się spotkałem. Dobra robota i dzięki!
David Hall
9
Anonimowy użytkownik zasugerował: „Dołączając ścieżkę do biblioteki, upewnij się, że wpisujesz je w cudzysłowie, jeśli ścieżka zawiera spacje”. Dodanie tego jako komentarza, jeśli komuś to pomoże.
iDev
2
Dodatkowym sposobem dołączenia biblioteki statycznej jest skonfigurowanie projektu w ramach „zależności projektu” rozwiązania jako zależności biblioteki statycznej, z którą ma być połączony. Zajęło mi wieki, aby dowiedzieć się, dlaczego jeden z moich projektów łączył się prawidłowo a drugi nie - oto dlaczego.
Stuart Wood
3
Chciałbym zaznaczyć, że używanie opcji „Dodatkowe katalogi dołączane” z katalogiem plików źródłowych innego projektu może być okropnym pomysłem. Drugi projekt może mieć pliki o takich samych nazwach (bardzo prawdopodobne, jeśli używasz wstępnie skompilowanych nagłówków dla każdego z nich). Osobiście wolę dodać folder nadrzędny z plikami źródłowymi projektów, więc możesz przynajmniej określić siebie, np #include "proj2\include.h". Posiadanie wielu projektów na rozwiązanie wydaje się być bardzo ukierunkowane na języki NET, ponieważ są one używane w bardzo różny sposób. Jednak aby znaleźć świetny sposób na przezwyciężenie tego w projektach C ++.
Deji
18
To jest trochę tandetne. VS może to zrobić automatycznie. Trudno uwierzyć, że nie ma lepszego rozwiązania w porównaniu z twardym kodowaniem ścieżki - ustawienie zależności projektu lub tym podobne może być przyjemne.
Cookie
4

#includenie ma nic wspólnego z projektami - po prostu mówi preprocesorowi „umieść tutaj zawartość pliku nagłówkowego”. Jeśli podasz mu ścieżkę wskazującą na poprawną lokalizację (może to być ścieżka względna, np. ../Your_file.h), zostanie uwzględniona poprawnie.

Będziesz jednak musiał poznać biblioteki (biblioteki statyczne / dynamiczne), aby takie projekty łączyły się prawidłowo - ale to już inna kwestia.

Assaf Lavie
źródło
3

Ponieważ oba projekty są objęte tym samym rozwiązaniem, istnieje prostszy sposób na pliki dołączania i konsolidator, jak opisano w https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- projekty? view = vs-2019 :

  1. Uwzględnienie można zapisać w ścieżce względnej (np #include "../libProject/libHeader.h".).
  2. W przypadku konsolidatora kliknij prawym przyciskiem myszy „References”, kliknij Add Reference i wybierz inny projekt.
Benav
źródło
Ładnie i prosto, ale szkoda, że ​​ścieżka względna jest potrzebna wszędzie tam, gdzie dołączasz nagłówek.
jojo
2

Musisz ustawić ścieżkę do nagłówków we właściwościach projektu, aby kompilator szukał tam, próbując znaleźć pliki nagłówkowe. Nie pamiętam dokładnej lokalizacji, ale spójrz na właściwości projektu i powinieneś to zobaczyć.

Rosstified
źródło
Lokalizacja może znajdować się w obszarze Właściwości> C / C ++> Ogólne> Dodatkowe katalogi dołączania.
Mustafa Kemal
0

Staraj się unikać pełnych odwołań do ścieżek w dyrektywie #include, niezależnie od tego, czy są one bezwzględne, czy względne. Zamiast tego dodaj lokalizację folderu dołączanego innego projektu w ustawieniach projektu. W razie potrzeby używaj tylko podfolderów w odniesieniach do ścieżek. W ten sposób łatwiej jest przenosić rzeczy bez konieczności aktualizowania kodu.

cdonner
źródło
0

Rozwijając odpowiedź @ Benav, moim preferowanym podejściem jest:

  1. Dodaj katalog rozwiązania do ścieżek dołączania:
    • kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań
    • wybierz Właściwości
    • z menu rozwijanych wybierz opcję Wszystkie konfiguracje i Wszystkie platformy
    • wybierz C / C ++> Ogólne
    • dodaj $(SolutionDir)do dodatkowych katalogów dołączania
  2. Dodaj odniesienia do każdego projektu, którego chcesz użyć:
    • kliknij prawym przyciskiem myszy referencje projektu w Eksploratorze rozwiązań
    • wybierz Dodaj odniesienie ...
    • wybierz projekt (y), do których chcesz się odnieść

Teraz możesz dołączyć nagłówki z projektów, do których się odwołujesz, na przykład:

#include "OtherProject/Header.h"

Uwagi:

  • Zakłada się, że plik rozwiązania jest przechowywany o jeden folder w górę z każdego projektu, co jest domyślną organizacją podczas tworzenia projektów w programie Visual Studio.
  • Możesz teraz dołączyć dowolny plik ze ścieżki względnej do folderu rozwiązania, co może nie być pożądane, ale ze względu na prostotę podejścia nie przeszkadza mi to.
  • Krok 2 nie jest konieczny dla #includes, ale ustawia prawidłowe zależności kompilacji, które prawdopodobnie chcesz.
yoyo
źródło