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_main
gmock
igmock_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 .vcxproj
elementu . 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 vcpkg
nazwie 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 false
wartość , 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
ivcpkg-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.