Megosztás a következőn keresztül:


vcpkg áttekintése

A vcpkg egy ingyenes és nyílt forráskódú C/C++ csomagkezelő, amelyet a Microsoft és a C++ közösség tart fenn, Windows, macOS és Linuxfut. Ez alapvetően egy C++ eszköz, amely C++ és CMake szkriptek használatával íródott. Úgy tervezték, hogy kezelje a C/C++ kódtárak kezelésével kapcsolatos egyedi kihívásokat.

Miért érdemes a vcpkg-t?

vcpkg-funkciók

Portok és hármasok

A vcpkg port egy verziószámozott buildrecept, amely egy csomagot állít elő. A csomag leggyakoribb típusa egy C/C++ kódtár, amely fejlécekből, forráskódból és bináris fájlokból áll.

A hármas egyetlen, kényelmes névvel rögzíti a cél építési környezetet (processzor, operációs rendszer, fordító, futtatókörnyezet stb.). A vcpkg alapértelmezés szerint több mint 70 triplát biztosít, de a sajátját is meghatározhatja.

Ha csomagot szeretne telepíteni a rendszerre, a vcpkg a port receptfájlját futtatja, amely egy CMake-szkript. A szkript tartalmazhat a forráskód letöltésének vagy egy build futtatásának lépéseit a rendszeren. A buildek során a vcpkg a triplet adataival biztosítja, hogy a létrehozott csomag megfeleljen a kívánt konfigurációnak.

Bináris gyorsítótárazás

Bár a vcpkg minden alkalommal forrásból fordít könyvtárakat, amikor szükséges, biztonsági másolatot készíthet a lefordított csomagokról egy bináris gyorsítótárba. Ez lehetővé teszi, hogy más fejlesztői gépek vagy folyamatos integrációs futtatások minden alkalommal új build futtatása nélkül hivatkozzon ezekre az előre összeállított csomagokra. A vcpkg megállapítja, hogy szükség van-e újraépítésre, ha ellenőrzi, hogy a gyorsítótár már tartalmaz-e érvényes, megfelelő bináris fájlokat tartalmazó csomagot.

Rakományjegyzék

Deklarálhatja a közvetlen függőségeket, és opcionális funkciókat vagy verziókorlátozásokat adhat hozzá egy jegyzékfájl. A jegyzékfájlokat be lehet jelenteni a forrásvezérlő rendszerbe, és meg lehet osztani a csapattal.

Verziószámozás

A vcpkg egyedi módon kezeli csomagverziókat. A jegyzékfájl alapértelmezés szerint hivatkozhat egyetlen alapverzióra. Az alapkonfiguráció zökkenőmentes, ütközésmentes függőségkezelést biztosít teljes reprodukálhatóság mellett. Emellett az egyes csomagverziók rögzítésével még fejlettebb vezérléssel is rendelkezhet.

Nyilvántartások

A beállításjegyzék- portok és elérhető verziók gyűjteménye, amelyeket a vcpkg-felhasználók telepíthetnek. A vcpkg alapértelmezés szerint a nyílt forráskódú kódtárak válogatott beállításjegyzékét biztosítja. Saját regisztrációs adatbázisokat is létrehozhat testreszabásokhoz, javításokhoz vagy privát kódtárakhoz.

Vagyon gyorsítótárazása

A erőforrások gyorsítótárazása lehetővé teszi, hogy a vcpkg leválasztott és offline környezetben működjön, biztosítva az üzletmenet folytonosságát még akkor is, ha egy távoli gazdagép leáll vagy veszélybe kerül. Letöltőtükröket használ az olyan objektumok feltöltéséhez és visszaállításához, mint a forráskód és a buildelési eszközök.

vcpkg más csomagkezelőkhöz képest

vcpkg a NuGethez képest

A NuGet egy .NET-csomagkezelő, amelyet gyakran használnak C/C++ fejlesztéshez, különösen a .NET-projekteket tartalmazó MSBuild-megoldásokhoz. A Microsoft C++ csapata általában nem javasolja a NuGet használatát C/C++ fejlesztéshez, mert a NuGetnek számos korlátozása van:

  • Fordítási változatok. Mivel a NuGet nem tud csomagokat készíteni a forrásból menet közben, előre összeállított bináris fájlokat kell megadnia, hogy megfeleljenek az összes felhasználóra vonatkozó összes lehetséges alkalmazás bináris felületi (ABI-) korlátozásának. A csomagok helyes összeállításáért a felhasználó a felelős. A bináris fájlokat a megfelelő metaadatok hiánya miatt is nehéz megkülönböztetni. Ez azt eredményezi, hogy a felhasználó az architektúra, az operációs rendszer és a fordító adatait a csomag nevében helyezi el. Ez nem kívánatos, mert az architektúra, az operációs rendszer és a fordító adataira vonatkozó korlátozások nem kényszeríthetők ki a csomag beszerzése során.
  • bináris vs. forrás. A NuGet az alapoktól kezdve úgy lett kialakítva, hogy viszonylag kicsi, előre összeállított bináris fájlokat biztosítson. A fejlesztőknek hozzáféréssel kell rendelkezniük a forráskódhoz az ABI-kompatibilitás, a teljesítmény, az integritás és a hibakeresés biztosításához.
  • Nincs NuGet PackageReference-támogatás. A NuGet PackageReference nem támogatott .vcxproj fájlok esetében, és a C++ és a .NET MSBuild projektek közötti technikai és architekturális különbségek miatt a jövőben nem tervezik hozzáadni. Ez azt jelenti, hogy a NuGet C++ felhasználói nem élvezhetik az olyan funkciók előnyeit, mint a globális gyorsítótár használata és a függőségek egyszerű MSBuild-kifejezésekben való hivatkozása a feltételes logikához való hozzáféréssel.
  • Tranzitív ABI-nyomkövetés. A vcpkg újraépíti a nyílt forráskódú függőségeket, amelyeket egy adott csomag módosítása érint. Ha például egy új frissítés jelenik meg a Boost számára, a vcpkg újraépíti a Boost összes függőségét, és a Boosttól függő kódtárakat, hogy továbbra is működjenek. A vcpkg tárház kódtárainak frissítésére irányuló lekérések addig nem kerülnek elfogadásra, amíg az építési idejű ütközéseket meg nem oldják.

vcpkg a rendszercsomag-kezelőkhöz képest

Linux, macOS és Windows rendszerek csomagkezelőinek széles választéka áll rendelkezésre, amelyek C/C++ kódtárak beszerzésére és kezelésére használhatók. Ezek a csomagkezelők általában kiváló választás az alkalmazások kezeléséhez. A támogatás általános jellege miatt azonban gyakran nem tudnak olyan funkciókat biztosítani, amelyek különösen a C/C++ fejlesztők számára hasznosak. Bár a futásteljesítmény eltérő lesz, és egyes rendszercsomag-kezelők az alábbi funkciók némelyikét biztosítják, egyik sem rendelkezik az alábbiakkal:

  • terjeszthető fejlesztői eszközök: a vcpkg újraterjeszthető fejlesztői eszközöket szerezhet be a hibakereséshez.
  • előre összeállított csomagok és a forrásból való buildelés: a vcpkg az egyéni követelményeknek megfelelően hozhat létre csomagokat a forrásból. Nem kell előre összeállított, előre összeállított csomagokkal foglalkoznia, hogy azok működjenek.
  • katalógusszintű verziószámozási: a vcpkg lehetővé teszi, hogy kompatibilis csomagok verziókészletétől függjön ahelyett, hogy az egyes csomagverziókat mikromaninálnia kellene. Ezt szükség szerint továbbra is megteheti, de az alapértelmezett felület úgy van kialakítva, hogy könnyen elkezdhető legyen.
  • Ugyanazon kódtár több példánya egy rendszeren: Ugyanazon a rendszeren több példány is telepíthető ugyanahhoz a függőséghez a vcpkg használatával, míg a rendszercsomag-kezelők egyetlen, rendszerszintű helyre telepíthetik az egyik verziót. Ez bonyolítja a dolgokat, ha egy tár különböző verzióitól függően több projekt is van.
  • katalógusméret: Mivel a vcpkg a C/C++-ra specializálódott, a rendszercsomag-kezelőkhöz képest nagyon nagy C/C++ kódtár-gyűjteményrel rendelkezik, és aktívan karbantartja. Általában nagyobb valószínűséggel talál hasznos és naprakész kódtárakat a C++ fejlesztéshez.
  • platformfüggetlen támogatás: A rendszercsomag-kezelők egy adott rendszerhez zárolt csomagokat biztosítanak. Ha több operációsrendszer-ízt is meg kell céloznia, egy másik csomagkezelőt kell találnia a második rendszerhez. Ezzel szemben a vcpkg platformfüggetlen csomagkezelő. Ezért egyszerűen módosítania kell a célként kitűzött konstrukciókat ennek megfelelően.

Vannak olyan helyzetek, amikor a rendszercsomag-kezelőnek teljesen van értelme:

  • A rendszercsomag-kezelők általában jól végzik az adott rendszerre vonatkozó kódtárak biztosítását és karbantartását
  • Az előre összeállított csomagoknak azonnal működniük kell az adott rendszeren, ha a projekt, amelyre használják, egyszerű buildkonfigurációval rendelkezik.
  • Ha nem kíván platformfüggetlen fejlesztést végezni, nem fog operációsrendszer-kompatibilitási problémákba ütközni a rendszercsomag-kezelővel.

A vcpkg úgy lett kialakítva, hogy a rendszercsomag-kezelőkkel együttműködve működjön együtt, ezért nyugodtan használhatja azt az eszközt, amely a legértelműbb az egyes függőségekhez.

A vcpkg használatának első lépései

A vcpkg kipróbálásához tekintse meg bevezető oktatóanyagainkat:

Ha a fordítórendszer nem CMake vagy MSBuild, a vcpkg támogatja a manuális integrációt az előnyben részesített környezettel.