Omówienie programu vcpkg
vcpkg to bezpłatny i open source menedżer pakietów C/C++ obsługiwany przez firmę Microsoft i społeczność języka C++ działającą w systemach Windows, macOS i Linux. Jest to narzędzie C++ w samym sercu i jest napisane przy użyciu skryptów C++ i CMake. Jest on przeznaczony do rozwiązywania unikatowych punktów bólu z zarządzaniem bibliotekami C/C++.
- Ponad 2300 bibliotek typu open source do wyboru w nadzorowanym rejestrze, rutynowo skompilowane w celu zweryfikowania zgodności usługi ABI
- Tworzenie własnego rejestru bibliotek niestandardowych przy użyciu własnych pakietów bibliotek niestandardowych
- Spójne, międzyplatformowe środowisko dla systemów Windows, macOS i Linux
- Łatwe dodawanie bibliotek do projektu przy użyciu dowolnego systemu kompilacji i projektu
- Tworzenie zależności ze źródła lub pobierania wstępnie skompilowanych plików binarnych zweryfikowanych przez usługę ABI z ponad 70 konfiguracjami dostępnymi domyślnie i nieskończonym dostosowaniem dla określonych wymagań
- Zapobieganie konfliktom wersji i problemom z rombem między zależnościami przy użyciu unikatowego projektu przechowywania wersji
- W przypadku użytkowników programu MSBuild i narzędzia CMake: automatyczna integracja ze środowiskiem kompilacji w celu zapewnienia bezproblemowego uzyskiwania zależności
- Zaufane przez studentów, deweloperów open source, hobbystów i profesjonalistów, w tym niektóre z największych przedsiębiorstw
Port vcpkg to przepis kompilacji w wersji, który tworzy pakiet. Najczęstszym typem pakietu jest biblioteka C/C++ składająca się z nagłówków, kodu źródłowego i plików binarnych.
Triplet przechwytuje docelowe środowisko kompilacji (cpu, os, kompilator, środowisko uruchomieniowe itp.) w jednej, wygodnej nazwie. Narzędzie vcpkg domyślnie udostępnia ponad 70 trojaków, ale można również zdefiniować własne.
Aby zainstalować pakiet w systemie, narzędzie vcpkg uruchamia plik przepisu portu, który jest skryptem narzędzia CMake. Skrypt może zawierać kroki pobierania kodu źródłowego lub uruchamiania kompilacji w systemie. Podczas kompilacji program vcpkg używa informacji w trójce, aby upewnić się, że wygenerowany pakiet jest zgodny z żądaną konfiguracją.
Podczas gdy narzędzie vcpkg kompiluje biblioteki ze źródła zawsze wtedy, gdy jest to konieczne, można utworzyć kopię zapasową wbudowanych pakietów w binarnej pamięci podręcznej. Dzięki temu inne maszyny deweloperskie lub przebiegi ciągłej integracji mogą odwoływać się do tych wstępnie utworzonych pakietów bez konieczności uruchamiania nowej kompilacji za każdym razem. Narzędzie vcpkg określa, czy ponowna kompilacja jest konieczna, sprawdzając, czy pamięć podręczna zawiera już prawidłowy istniejący pakiet z odpowiednimi plikami binarnymi.
Możesz zadeklarować bezpośrednie zależności i dodać opcjonalne funkcje lub ograniczenia wersji w pliku manifestu. Pliki manifestu można zaewidencjonować w systemie kontroli źródła i udostępnić zespołowi.
Narzędzie vcpkg ma unikatowy sposób obsługi wersji pakietów. Plik manifestu może domyślnie odwoływać się do pojedynczej wersji punktu odniesienia ustawionej. Punkt odniesienia zapewnia bezproblemowe, wolne od konfliktów zarządzanie zależnościami z pełną powtarzalnością. Ponadto nadal możesz mieć bardziej zaawansowaną kontrolę, przypinając poszczególne wersje pakietów.
Rejestr to kolekcja portów i dostępnych wersji, które użytkownik vcpkg może zainstalować. Narzędzie vcpkg domyślnie udostępnia wyselekcjonowany rejestr bibliotek open source. Możesz również utworzyć własne rejestry dla dostosowań, poprawek lub bibliotek prywatnych.
Buforowanie zasobów umożliwia programowi vcpkg pracę w środowiskach rozgałęzionych w powietrzu i offline, zapewniając ciągłość działania, nawet jeśli host zdalny ulegnie awarii lub zostanie naruszony. Używa funkcji download-mirrors do przekazywania i przywracania zasobów, takich jak kod źródłowy i narzędzia kompilacji.
NuGet to menedżer pakietów platformy .NET, który jest często używany do programowania w języku C/C++, szczególnie w przypadku rozwiązań MSBuild zawierających projekty platformy .NET. Ogólnie rzecz biorąc, zespół języka Microsoft C++ nie zaleca używania narzędzia NuGet do programowania w języku C/C++, ponieważ pakiet NuGet ma kilka ograniczeń:
- Smaki kompilacji. Ponieważ pakiet NuGet nie może kompilować pakietów ze źródła na bieżąco, należy zapewnić wstępnie utworzone pliki binarne, aby dopasować wszystkie możliwe ograniczenia interfejsu binarnego aplikacji (ABI) dla wszystkich użytkowników. Użytkownik jest odpowiedzialny za poprawne kompilowanie pakietów. Trudno jest również odróżnić pliki binarne z powodu braku odpowiednich metadanych. Spowoduje to umieszczenie przez użytkownika informacji o architekturze, systemie operacyjnym i kompilatorze w nazwie pakietu. Jest to niepożądane, ponieważ podczas pozyskiwania pakietu nie można wymuszać ograniczeń dotyczących architektury, systemu operacyjnego i kompilatora.
- Plik binarny a źródło. Pakiet NuGet został zaprojektowany od podstaw, aby zapewnić stosunkowo małe, wstępnie utworzone pliki binarne. Deweloperzy muszą mieć dostęp do kodu źródłowego, aby zapewnić zgodność, wydajność, integralność i debugowanie usługi ABI.
- Brak obsługi funkcji NuGet PackageReference. Funkcja NuGet PackageReference nie jest obsługiwana w przypadku
.vcxproj
plików i nie ma planu dodania go w przyszłości ze względu na różnice techniczne i architektoniczne między projektami C++ i .NET MSBuild. Oznacza to, że użytkownicy nuGet C++ nie skorzystają z funkcji, takich jak użycie globalnej pamięci podręcznej i odwoływanie się do zależności w prostych terminach MSBuild z dostępem do logiki warunkowej. - Przechodnie śledzenie ABI. Narzędzie vcpkg ponownie kompiluje zależności typu open source, których dotyczy zmiana w określonym pakiecie. Jeśli na przykład nowa aktualizacja zostanie wydana dla funkcji Boost, narzędzie vcpkg ponownie kompiluje wszystkie zależności funkcji Boost i bibliotek, które zależą od boost, aby upewnić się, że nadal działają. Żądania ściągnięcia w celu zaktualizowania bibliotek w repozytorium vcpkg nie są scalane, dopóki nie zostaną rozwiązane konflikty czasu kompilacji.
Istnieje wiele różnych menedżerów pakietów systemowych dla systemów Linux, macOS i Windows, które mogą służyć do uzyskiwania bibliotek C/C++ i zarządzania nimi. Te menedżery pakietów są zazwyczaj doskonałymi wyborami do zarządzania aplikacjami. Jednak ze względu na ogólny charakter ich obsługi często nie dostarcza funkcji korzystnych szczególnie dla deweloperów języka C/C++. Chociaż przebieg będzie się różnić, a niektórzy menedżerowie pakietów systemowych dostarczają niektóre z tych funkcji, żaden z nich nie ma następujących elementów:
- Zasoby deweloperów pakietu redystrybucyjnego: narzędzie vcpkg może uzyskać zasoby deweloperów pakietu redystrybucyjnego, aby ułatwić debugowanie.
- Wstępnie utworzone pakiety a kompilacja ze źródła: narzędzie vcpkg może kompilować pakiety ze źródła na podstawie niestandardowych wymagań. Nie ma potrzeby zajmowania się wstępnie skompilowanymi pakietami, aby mogły działać.
- Przechowywanie wersji w całym katalogu: narzędzie vcpkg umożliwia zależne od zestawu wersji zgodnych pakietów, a nie konieczności mikrozarządzanie poszczególnymi wersjami pakietów. Nadal możesz to zrobić w razie potrzeby, ale domyślne środowisko jest zaprojektowane tak, aby ułatwić rozpoczęcie pracy.
- Wiele kopii tej samej biblioteki w jednym systemie: można mieć wiele kopii tej samej zależności zainstalowanej w tym samym systemie z narzędziem vcpkg, natomiast menedżerowie pakietów systemowych mogą zainstalować jedną wersję w jednej lokalizacji w całym systemie. Komplikuje to elementy, gdy masz wiele projektów w zależności od różnych wersji biblioteki.
- Rozmiar katalogu: ponieważ vcpkg jest wyspecjalizowany dla języka C/C++, ma bardzo dużą kolekcję bibliotek C/C++ w porównaniu z menedżerami pakietów systemowych i jest aktywnie utrzymywana. Ogólnie rzecz biorąc, bardziej prawdopodobne jest znalezienie przydatnych i aktualnych bibliotek na potrzeby programowania w języku C++.
- Obsługa wielu platform: Menedżerowie pakietów systemowych udostępniają pakiety zablokowane dla określonego systemu. Jeśli potrzebujesz więcej niż jednego systemu operacyjnego, musisz znaleźć innego menedżera pakietów dla drugiego systemu. Z kolei vcpkg jest międzyplatformowym menedżerem pakietów. Dlatego wystarczy odpowiednio dostosować kompilacje docelowe.
Istnieją sytuacje, w których menedżer pakietów systemowych absolutnie ma sens:
- Menedżerowie pakietów systemowych mają tendencję do dobrej pracy, zapewniając i utrzymując biblioteki specyficzne dla tego systemu
- Wstępnie utworzone pakiety powinny działać w tym systemie, jeśli projekt korzystający z projektu ma prostą konfigurację kompilacji.
- Jeśli nie zamierzasz wykonywać programowania międzyplatformowego, nie wystąpią problemy ze zgodnością systemu operacyjnego z menedżerem pakietów systemowych.
Narzędzie vcpkg jest przeznaczone do pracy obok menedżerów pakietów systemowych, więc możesz korzystać z narzędzia, które ma największe znaczenie dla każdej zależności.
Aby wypróbować narzędzie vcpkg, zapoznaj się z naszymi samouczkami wprowadzającymi:
- Instalowanie i używanie pakietów za pomocą narzędzia CMake
- Instalowanie i używanie pakietów za pomocą narzędzia CMake w programie Visual Studio
- Instalowanie i używanie pakietów za pomocą programu MSBuild w programie Visual Studio
- Instalowanie i używanie pakietów za pomocą narzędzia CMake w programie Visual Studio Code
- Tworzenie pakietu biblioteki za pomocą narzędzia vcpkg
- Dodawanie portu do rejestru wyselekcjonowanych vcpkg
Jeśli system kompilacji nie jest CMake lub MSBuild, vcpkg obsługuje również ręczną integrację z preferowanym środowiskiem.
Opinia o produkcie vcpkg
vcpkg to projekt typu open source. Wybierz link, aby przekazać opinię: