vcpkg w projektach MSBuild

Metody integracji

Integracja w całym użytkowniku

Aby użyć narzędzia vcpkg w projektach MSBuild, uruchom następujące polecenie:

vcpkg integrate install

Wystarczy uruchomić polecenie przy pierwszym włączeniu vcpkg integrate install integracji z programem MSBuild. Umożliwia to integrację programu MSBuild ze wszystkimi istniejącymi i przyszłymi projektami.

Jeśli masz wiele wystąpień programu vcpkg, możesz użyć vcpkg integrate install polecenia , aby zaktualizować, które wystąpienie programu vcpkg jest używane w programie MSBuild. Użyj vcpkg integrate remove polecenia , aby usunąć integrację w całym programie MSBuild.

Ta metoda integracji automatycznie dodaje zainstalowane pakiety vcpkg do następujących właściwości projektu: Dołączanie katalogów, Katalogi łączy i Biblioteki łączy. Ponadto spowoduje to utworzenie akcji po kompilacji, która gwarantuje, że wszystkie wymagane biblioteki DLL zostaną skopiowane do folderu wyjściowego kompilacji. Działa to w przypadku wszystkich rozwiązań i projektów korzystających z programu Visual Studio 2015 lub nowszego.

To wszystko, co musisz zrobić dla zdecydowanej większości bibliotek. Jednak niektóre biblioteki wykonują sprzeczne zachowania, takie jak ponowne zdefiniowanie elementu main(). Ponieważ musisz wybrać dla projektu, które z tych opcji powodujących konflikt chcesz, musisz ręcznie dodać te biblioteki do danych wejściowych konsolidatora.

Poniżej przedstawiono kilka przykładów, w których konieczne jest ręczne łączenie (nie jest to wyczerpująca lista):

  • Gtest udostępnia gtest, , gtest_maingmockigmock_main
  • SDL2 zapewnia SDL2main
  • Dostarcza kod SFML sfml-main
  • Boost.Test zapewnia boost_test_exec_monitor

Aby uzyskać pełną listę wszystkich zainstalowanych pakietów, uruchom polecenie vcpkg owns manual-link.

Importowanie .props i .targets

Narzędzie vcpkg można również zintegrować z projektami MSBuild przez jawne zaimportowanie scripts/buildsystems/vcpkg.props plików i scripts/buildsystems/vcpkg.targets do każdego .vcxprojelementu . Korzystając ze ścieżek względnych, umożliwia to korzystanie z narzędzia vcpkg przez moduł podrzędny i automatycznie uzyskiwane przez użytkowników po uruchomieniu polecenia git clone.

Najprostszym sposobem dodania ich do każdego projektu w rozwiązaniu jest utworzenie Directory.Build.props plików i Directory.Build.targets w katalogu głównym repozytorium.

W poniższych przykładach założono, że znajdują się one w katalogu głównym repozytorium z modułem podrzędnym o vcpkgnazwie microsoft/vcpkg .

Przykład: Directory.Build.props

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>

Przykład: Directory.Build.targets

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>

Aby uzyskać więcej informacji na Directory.Build.targets temat iDirectory.Build.props, zobacz sekcję Dostosowywanie kompilacji oficjalnej dokumentacji programu MSBuild.

Połączony pakiet NuGet

Uwaga

Takie podejście nie jest zalecane w przypadku nowych projektów, ponieważ utrudnia udostępnianie ich innym osobom. Aby uzyskać przenośny, samodzielny pakiet NuGet, zobacz export command.

Projekty vs można również zintegrować za pomocą pakietu NuGet. Spowoduje to zmodyfikowanie pliku projektu, dlatego nie zalecamy tego podejścia w przypadku projektów open source.

PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg

With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
    Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"

Uwaga

Wygenerowany pakiet NuGet nie zawiera rzeczywistych bibliotek. Zamiast tego działa jak skrót (lub symlink) do instalacji programu vcpkg i będzie "automatycznie" aktualizowany przy użyciu wszelkich zmian (instalowanie/usuwanie) do bibliotek. Nie trzeba ponownie generować ani aktualizować pakietu NuGet.

Wspólna konfiguracja

VcpkgEnabled (Użyj narzędzia Vcpkg)

Można to ustawić na wartość "false", aby jawnie wyłączyć integrację programu vcpkg dla projektu

VcpkgConfiguration (Konfiguracja programu Vcpkg)

Jeśli nazwy konfiguracji są zbyt złożone, aby vcpkg odgadnąć poprawnie, możesz przypisać tę właściwość do Release lub Debug jawnie poinformować vcpkg, jaki wariant bibliotek chcesz używać.

VcpkgEnableManifest (Użyj manifestu Vcpkg)

Ta właściwość musi być ustawiona na true , aby korzystać z pliku lokalnego vcpkg.json . Jeśli ustawiono wartość false, wszystkie pliki lokalne vcpkg.json zostaną zignorowane.

Ta opcja jest obecnie domyślnie ustawiona na falsewartość , ale będzie domyślnie ustawiona true na wartość w przyszłości.

VcpkgTriplet (Trojaczki)

Ta właściwość steruje potrójną ilością do korzystania z bibliotek, takich jak x64-windows-static lub arm64-windows.

Jeśli nie zostanie to jawnie ustawione, narzędzie vcpkg zdefiniuj poprawną tróję na podstawie ustawień programu Visual Studio. vcpkg będzie deduce tylko trojaczki, które korzystają z linków biblioteki dynamicznej i dynamicznego połączenia CRT; Jeśli chcesz, aby zależności statyczne lub użyć statycznego CRT (/MT), musisz ręcznie ustawić potrójny.

Możesz zobaczyć automatycznie dedukowany triplet, ustawiając czasownik MSBuild na Normalny lub wyższy:

Skrót: Ctrl+Q "build and run"

Narzędzia — opcje —>> Projekty i rozwiązania —> Kompilowanie i uruchamianie —> szczegółowość kompilacji projektu MSBuild

Zobacz też Trójkropki

VcpkgHostTriplet (Trojaczki hosta)

Można to ustawić na niestandardową trójkę do użycia na potrzeby rozpoznawania zależności hosta.

Jeśli opcja nie zostanie ustawiona, wartość domyślna to "native" triplet (x64-windows).

Zobacz również Zależności hosta.

VcpkgInstalledDir (Zainstalowany katalog)

Ta właściwość definiuje lokalizację vcpkg zainstaluje i zużyje biblioteki.

W trybie manifestu ta wartość domyślna to $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\. W trybie klasycznym ta wartość domyślna to $(VcpkgRoot)\installed\.

VcpkgApplocalDeps (Lokalnie wdrażaj biblioteki DLL aplikacji)

Ta właściwość włącza lub wyłącza wykrywanie i kopiowanie zależnych bibliotek DLL z zainstalowanego drzewa vcpkg do katalogu wyjściowego projektu.

VcpkgXUseBuiltInApplocalDeps (Użyj wbudowanego wdrożenia lokalnego aplikacji)

Ta właściwość, po włączeniu, używa eksperymentalnej implementacji wdrożenia bibliotek DLL wbudowanej vcpkg podczas lokalnego wdrażania bibliotek DLL przez aplikację. Ta właściwość zostanie usunięta i nie będzie działać, gdy wbudowana implementacja nie jest już eksperymentalna.

Ta właściwość nie ma wpływu na $(VcpkgApplocalDeps) wartość false.

Konfiguracja trybu manifestu

Aby używać manifestów (vcpkg.json) w programie MSBuild, najpierw należy użyć jednej z powyższych metod integracji. Następnie dodaj vcpkg.json powyżej pliku projektu (na przykład w katalogu głównym repozytorium źródłowego) i ustaw właściwość VcpkgEnableManifest na true. Tę właściwość można ustawić za pomocą środowiska IDE we właściwościach>projektu Vcpkg>Użyj manifestu Vcpkg. Może być konieczne ponowne załadowanie środowiska IDE, aby wyświetlić stronę właściwości narzędzia vcpkg.

Narzędzie vcpkg zostanie uruchomione podczas kompilacji projektu i zainstaluje vcpkg_installed/$(VcpkgTriplet)/ wszystkie wymienione zależności sąsiadujące z plikiem vcpkg.json . Te biblioteki zostaną automatycznie dołączone do projektów MSBuild i połączone z nimi.

Znane problemy

  • Program Visual Studio 2015 nie śledzi poprawnie edycji plików vcpkg.json i vcpkg-configuration.json i nie odpowie na zmiany, chyba że .cpp zostanie edytowany.

VcpkgAdditionalInstallOptions (Dodatkowe opcje)

W przypadku korzystania z manifestu ta opcja określa dodatkowe flagi wiersza polecenia, które mają być przekazywane do wywołania podstawowego narzędzia vcpkg. Może to służyć do uzyskiwania dostępu do funkcji, które nie zostały jeszcze ujawnione za pośrednictwem innej opcji.

VcpkgManifestInstall (Zainstaluj zależności programu Vcpkg)

Tę właściwość można ustawić tak false , aby wyłączyć automatyczne przywracanie zależności podczas kompilacji projektu. Zależności muszą zostać ręcznie przywrócone za pośrednictwem wiersza polecenia vcpkg oddzielnie.