Indelingsconventies voor installatiemaps

In dit artikel worden de indelingsconventies beschreven die worden gebruikt door vcpkg voor de installatiemap. De installatiemap bevat de bestanden die door elk pakket zijn geïnstalleerd. Portauteurs moeten ervoor zorgen dat hun pakketten voldoen aan de conventies die in dit artikel worden beschreven.

In de klassieke modus bevindt de installatiemap zich in $VCPKG_ROOT/installed (waar $VCPKG_ROOT is uw vcpkg-installatiepad). In de manifestmodus heeft elk manifestbestand een bijbehorende vcpkg_installed map. De locatie van de installatiemap kan worden gewijzigd met de --x-install-root optie. Ongeacht de bewerkingsmodus blijft de indeling van de installatiemap hetzelfde.

De installatiemap wordt gemaakt wanneer een pakket voor het eerst wordt geïnstalleerd, als u geen installatiemap ziet, probeert u eerst een aantal pakketten te installeren.

Het hoofdniveau van de installatiemap bevat:

  • Een vcpkg map die geïnstalleerde pakketten en bestanden bijhoudt
  • Een map voor elke triplet. Elke drievoudige map bevat bestanden die door elk pakket zijn geïnstalleerd.

Drievoudige mappen

De uitvoer van elke pakketinstallatie bevindt zich in een drievoudige map. Pakketten die zijn geïnstalleerd voor de x64-windows triplet bevinden zich bijvoorbeeld in installed/x64-windows de map.

De indeling voor de submappen in elke drievoudige map is hetzelfde:

Note

Sommige pakketten kunnen bestanden produceren die niet overeenkomen met de conventies die hier worden beschreven. Poortauteurs moeten de uiteindelijke locatie van de geproduceerde bestanden bepalen op basis van het doel dat elk bestand dient.

Submap Bestandstype
bin Release .dll en .pdb bestanden
debug/bin Fouten opsporen .dll en .pdb bestanden
debug/lib Fouten opsporen.lib, en .dylib.so.a bestanden
debug/lib/manual-link Handmatig koppelingsbare foutopsporing.lib, .so- en .a.dylibbestanden
debug/plugins/<group> Fouten in gedeelde bibliotheken voor runtime laden
debug/lib/pkgconfig Fouten opsporen in pkg-config-bestanden (.pc)
include Koptekstbestanden (.h, .hpp, .hxx)
lib Bestanden vrijgeven.lib, .dylib.sovrijgeven en .a bestanden
lib/manual-link Handmatig te koppelen release .lib, .so, .dyliben .a bestanden
lib/pkgconfig Pkg-config-bestanden vrijgeven (.pc)
plugins/<group> Gedeelde bibliotheken voor runtime laden
share/<port> Aanvullende configuratie-onafhankelijke bestanden
share/<port>/copyright De licentietekst voor het pakket
share/<port>/usage Bestand met integratie-instructies voor buildsysteem
share/<port>/usage-accurate Markering voor gegenereerde gebruiksnauwkeurigheid
share/<port>/vcpkg.spdx.json Gegenereerde softwarefactuur van materialen
share/<port>/vcpkg-port-config.cmake Door poort gedefinieerde CMake-functies en -variabelen
share/<lowercase-package>/<package>Config.cmake CMake-integratiebestanden voor find_package(package)
share/<cmakepackagename>/vcpkg-cmake-wrapper.cmake CMake-onderdrukking find_package(<cmakepackagename>)
share/pkgconfig Configuratie-onafhankelijke pkg-config-bestanden (.pc)
tools/<port> Uitvoerbare hulpprogramma's en ondersteunende bestanden

bin en debug/bin mappen

Op Windows bevatten deze mappen RESPECTIEVELIJK DLL- en PDB-bestanden voor de release- en foutopsporingsconfiguratie. Elk uitvoerbaar bestand dat door een poort wordt geproduceerd, moet worden verplaatst naar een tools/<port> map.

include

Bevat headerbestanden (.h, .hpp, .hxx). De indeling onder deze map moet overeenkomen met het beoogde gebruik van de headerbestanden van het pakket. Een bibliotheek die van plan is te gebruiken#include <contoso/contoso.h>, contoso moet bijvoorbeeld het headerbestand include/contoso/contoso.hbevatten.

vcpkg verbiedt het installeren van een aantal gereserveerde headerbestandsnamen in de hoofdmap van de include map, bijvoorbeeld: err.h, user.h, time.hen andere. Bibliotheken die een verboden headerbestandsnaam opgeven, moeten hun headerbestanden in een include/<port> map plaatsen. Als de bibliotheek van plan is een systeemkopbestand te vervangen, moet het beleid worden ingesteld in de VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS .portfile.cmake

lib en debug/lib mappen

Bevat statische bibliotheken, importbibliotheken (op Windows) en gedeelde bibliotheken (op niet-Windows).

Bevat bibliotheken die handmatig moeten worden gekoppeld.

Bestanden die problemen kunnen veroorzaken wanneer de koppeling automatisch wordt gekoppeld, moeten in de lib/manual-link mappen worden geplaatst in plaats van in de lib map. Als een bibliotheek bijvoorbeeld bedoeld is om de main() functie voor een programma te definiëren.

lib/pkgconfig share/pkgconfig en debug/lib/pkgconfig mappen

Bevat pkg-config-integratiebestanden (.pc). Een bibliotheek mag niet tegelijkertijd configuratieafhankelijke en configuratie-onafhankelijke bestanden bieden. Bijvoorbeeld: niet installeren lib/pkgconfig/contoso.pc en share/pkgconfig/contoso.pc.

plugins/<group> en debug/plugins/<group>

Bevat gedeelde bibliotheken die tijdens runtime moeten worden geladen door toepassingen te gebruiken.

share/<port>

Bevat diverse bestanden die door elke poort zijn geïnstalleerd. Bijvoorbeeld SPDX-bestanden, scripts, enzovoort.

vcpkg verwacht dat poorten een copyright bestand leveren dat de licentiegegevens van het geïnstalleerde pakket bevat. Zie de handleiding voor onderhoud voor meer informatie.

share/<port>/usage

Een tekstbestand met instructies voor het integreren van een bibliotheek binnen een project. Zie de handleiding voor het verstrekken van gebruiksdocumentatie voor pakketten voor meer informatie.

share/<port>/usage-accurate

Een leeg markeringsbestand dat bevestigt dat de gegenereerde gebruiksgegevens van vcpkg juist zijn. Wanneer dit bestand is geïnstalleerd, laat vcpkg de heuristische waarschuwing weg van de gegenereerde gebruiksgegevens. Zie de handleiding voor gebruiksdocumentatie voor meer informatie.

share/<port>/vcpkg.spdx.json

De softwarefactuur van materialen die door vcpkg worden gegenereerd voor het geïnstalleerde pakket.

share/<lowercase-package>/<package>Config.cmake, share/<package>/<package>-config.cmake

CMake-integratiebestanden moeten in de share map worden geplaatst en moeten de regels van CMake respecteren voor find_package(package) in CONFIG de modus.

Als een poort bijvoorbeeld verwacht te leveren find_package(MyPackage REQUIRED), moet share/mypackage/MyPackageConfig.cmake deze een of share/mypackage/MyPackage-config.cmake.

Als een pakket CMake-integratiebestanden bevat, vcpkg_cmake_config_fixup() De helperfunctie moet worden aangeroepen om eventuele niet-herbruikbare paden te herstellen en buildconfiguraties samen te voegen.

tools/<port>

Important

vcpkg is in de eerste plaats een C++-bibliotheekafhankelijkheidsbeheerder. Poortauteurs moeten bewust zijn bij het kiezen om hulpprogramma's op te nemen in de installatie-uitvoer. Denk bijvoorbeeld aan het installeren van alleen een uitvoerbare release wanneer het hulpprogramma voor foutopsporing niet nodig is.

Uitvoerbare bestanden voor release en foutopsporing moeten worden opgegeven wanneer de uitvoerbare bestanden zijn bedoeld voor runtimegebruik.

Bevat uitvoerbare hulpprogramma's die door een poort worden geproduceerd. Het wordt ten zeerste aanbevolen, maar niet vereist, dat elk geïnstalleerd uitvoerbaar bestand naar een submap gaat die overeenkomt met de naam van de poort die het heeft geproduceerd. Een poort kan bijvoorbeeld contoso een ContosoGenerator.exe naar tools/contoso/ContosoGenerator.exe.

Sommige poorten vereisen dat hun uitvoerbare bestanden naar een bin submap gaan, in welk geval het aanbevolen patroon is tools/<port>/bin.