Auf Englisch lesen

Freigeben über


Häufig gestellte Fragen

Was sind der klassische Modus und der Manifestmodus?

Es gibt zwei Möglichkeiten zum Verwalten Ihrer Abhängigkeiten mit vcpkg:

  1. Im Manifestmodus können Sie Ihre direkten Abhängigkeiten, Versionsbeschränkungen und verwendeten Registrierungen in einer Datei mit dem Namen vcpkg.jsondeklarieren. Diese Datei sollte in Ihr Code-Repository aufgenommen werden und kann in Ihr Quellcodeverwaltungssystem eingecheckt werden. Abhängigkeiten werden in einem Unterordner mit dem Namen vcpkg_installedinstalliert. Auf diese Weise kann jedes Codeprojekt über eigene Abhängigkeiten verfügen; nichts ist systemweit installiert. Sie können vcpkg im Manifestmodus ausführen, indem Sie (ohne andere Argumente) ausführen vcpkg install oder die automatische Integration in MSBuild - und CMake-Projekte nutzen. Es wird empfohlen, Manifeste für Ihre Projekte im klassischen Modus in den meisten Fällen zu verwenden, da Sie bessere Kontrolle über Ihre Abhängigkeiten haben. Weitere Details finden Sie in unserem Artikel zum Manifestmodus.
  2. Der klassische Modus ist die herkömmlichere Methode zum Verwalten von Abhängigkeiten, die das Ausführen von vcpkg-Befehlen umfasst, die jede direkte Abhängigkeit zum Installieren, Ändern oder Entfernen angeben. Abhängigkeiten werden im vcpkg-Installationsverzeichnis gespeichert, sodass mehrere verbrauchende Projekte auf dieselbe Gruppe von Abhängigkeiten verweisen können. Weitere Details finden Sie in unserem Artikel zum klassischen Modus.

Kann ich eine neue Bibliothek mitwirken?

Ja! Lesen Sie zunächst unsere Beitragsrichtlinien. Sehen Sie sich auch unseren Betreuerleitfaden an, der weitere Details enthält. Außerdem haben wir ein Lernprogramm zum Hinzufügen eines Ports zu vcpkg , um Ihnen den Einstieg zu erleichtern.

Wenn Sie mitwirken möchten, aber keine bestimmte Bibliothek berücksichtigen möchten, sehen Sie sich die Liste der neuen Portanforderungen an.

Kann vcpkg vordefinierte Binärpakete erstellen? Was ist das binärformat, das von vcpkg verwendet wird?

Ja! Sehen Sie sich den export Befehl an, wenn Sie Binärdateien zum Exportieren in andere Umgebungen erstellen möchten.

Wenn Sie alternativ Binärdateien beibehalten möchten, die von vcpkg install Vorgängen zur späteren Wiederverwendung erstellt werden, lesen Sie das Feature für die binäre Zwischenspeicherung.

Gewusst wie Bibliotheken aktualisieren?

Wenn Sie ein Manifest (vcpkg.json Datei) zum Verwalten Ihrer Abhängigkeiten verwenden, müssen Sie diese Datei aktualisieren. Ausführliche Informationen finden Sie in der Versionsverwaltungsreferenzdokumentation .

Wenn Sie vcpkg im klassischen Modus verwenden (Ausführen von Befehlen zum Verwalten von Paketen, keine Manifestdatei), finden Sie in der vcpkg update Befehlsdokumentation. Dieser Befehl listet alle Pakete auf, die mit Ihren aktuellen Portdateien nicht synchronisiert sind. Anschließend müssen Sie den vcpkg upgrade Befehl ausführen, um die Änderungen zu bestätigen.

Gewusst wie weitere Bibliotheken erhalten?

Die Liste der Bibliotheken wird aus dem ports\ Verzeichnis aufgezählt. Im Design können Sie Bibliotheken aus diesem Verzeichnis hinzufügen und entfernen, wie sie für sich oder Ihr Unternehmen geeignet sind – sehen Sie sich unsere Beispiele zum Packen von Zipfiles und GitHub-Repositorys an.

Wir empfehlen das Klonen direkt von GitHub und die Verwendung git pull zum Aktualisieren der Liste der Portdateien.

Kann ich mit diesem Tool eine private Bibliothek erstellen?

Ja. Folgen Sie unserem Verpackungsbeispiel , um Ihren eigenen Port zu erstellen, und sehen Sie sich die Dokumentation zu Überlagerungsports und Registrierungen an, um zu erfahren, wie Sie Ihre privaten Ports verwalten.

Sie können dies weiter ausführen, indem Sie Ihre privaten Bibliotheken in einer Registrierung veröffentlichen. Weitere Informationen finden Sie im Artikel zum Erstellen von Registrierungen. Eine Registrierung ist eine Sammlung von Ports, ähnlich wie bei vcpkg, die Open Source-Bibliotheken enthält.

Kann ich eine vorgefertigte private Bibliothek mit diesem Tool verwenden?

Ja. Bei portfile.cmake einer Bibliothek handelt es sich im Wesentlichen um ein Skript, das die Kopfzeilen und Binärdateien in die richtige Anordnung einfügt ${CURRENT_PACKAGES_DIR}, sodass Sie vordefinierte Binärdateien abrufen können, eine Portdatei schreiben, die die Dateien direkt herunterlädt und anordnet.

Sehen Sie sich ein Beispiel dafür an ports\opengl\portfile.cmake , in dem dateien einfach aus dem Windows SDK kopiert werden.

Auf welche Plattformen kann ich mit vcpkg abzielen?

Unsere integrierten, kontinuierlich getesteten Triplets sind:

  • Windows Desktop (x86, x64, x64-static, arm64)
  • Universelle Windows-Plattform (x64 und arm64)
  • Mac OS X (x64-static)
  • Linux (x64-static)
  • Android (x64, arm64, arm-neon)

Diese Ziele werden strenger auf Kompatibilität mit jeder vcpkg-Version getestet. Wir haben jedoch eine viel größere Anzahl von Community-Triplets mit mehr Plattformen und Architekturen zur Verfügung, darunter für iOS, MinGW, WebAssembly, freeBSD und openBSD.

Sie können auch ihre eigenen Dreifache je nach Ihren Anforderungen definieren. vcpkg ist sehr anpassbar.

Weitere Details finden Sie vcpkg help triplet in der aktuellen Liste und in der Dokumentation zu Triplets .

Wird vcpkg unter Linux/OS X ausgeführt?

Ja! Wir testen kontinuierlich auf OS X und Ubuntu 22.04, aber wir wissen, dass Die Benutzer mit Arch, Fedora und FreeBSD erfolgreich waren. Wenn Sie Probleme mit Ihrer bevorzugten Linux-Distribution haben, lassen Sie uns in einem Problem wissen, und wir würden uns freuen, ihnen zu helfen!

Gewusst wie vcpkg aktualisieren?

Führen Sie die Ausführung git pull aus, um die neuesten Quellen abzurufen, und führen Sie bootstrap-vcpkg.bat dann (Windows) oder ./bootstrap-vcpkg.sh (Unix) aus, um vcpkg zu aktualisieren. Wenn Sie auch eine Kopie von vcpkg verwenden, die mit Visual Studio ausgeliefert wird, aktualisieren Sie einfach Ihre Visual Studio-Version aus dem Visual Studio-Installer.

Gewusst wie unterschiedliche Versionen einer Bibliothek auf einem Computer verwenden?

Wir empfehlen die Verwendung von Manifestdateien zum Verwalten von Abhängigkeiten für einzelne Projekte, die auch dann funktionieren, wenn sich mehrere Projekte auf demselben Computer befinden und Ihnen das einfache Verwalten von Paketversionen ermöglichen und von welchen Registrierungsbibliotheken Bibliotheken stammen.

Wenn Sie jedoch stattdessen den klassischen Modus verwenden, können Sie in einer einzigen Instanz von vcpkg (z. B. einer Gruppe von installed\, packages\usw ports\ .) nur eine Version einer Bibliothek installiert haben (andernfalls würden die Header miteinander in Konflikt stehen!). Für Diejenigen mit Erfahrung mit systemweiten Paketmanagern entsprechen Pakete in vcpkg den X-dev oder X-devel den Paketen. In diesem Fall wird empfohlen, separate Instanzen von vcpkg und die Pro-Projekt-Integrationsmechanismen zu verwenden, um unterschiedliche Versionen einer Bibliothek für verschiedene Projekte zu verwenden. Die Versionen jeder Bibliothek werden durch die Dateien ports\in angegeben, sodass sie einfach mit Standardbefehlen git bearbeitet werden. Dies erleichtert es ihnen, den gesamten Satz von Bibliotheken auf einen konsistenten Satz älterer Versionen zurückzustellen, die alle miteinander arbeiten. Wenn Sie dann eine bestimmte Bibliothek weiterleiten müssen, ist dies so einfach wie das Auschecken der entsprechenden Version von ports\<package>\. Wenn Ihre Anwendung für die Versionen von Bibliotheken sehr sensibel ist, empfehlen wir, die spezifischen Portdateien, die Sie benötigen, zusammen mit Ihren Projektquellen zu überprüfen und die --vcpkg-root Option zum Umleiten des Arbeitsverzeichnisses von vcpkg.exe.

Wie schützt vcpkg meine Privatsphäre?

Alle Informationen zum Datenschutz finden Sie im Datenschutzdokument .

Kann ich meine eigene CMake-Toolchaindatei mit der Toolbunddatei von vcpkg verwenden?

Ja. Wenn Sie bereits über eine CMake-Toolbunddatei verfügen, müssen Sie unsere Toolchaindatei am Ende Ihrer Datei einschließen. Dies sollte so einfach wie eine include(<vcpkg_root>\scripts\buildsystems\vcpkg.cmake) Direktive sein. Alternativ können Sie den Inhalt unserer scripts\buildsystems\vcpkg.cmake Datei am Ende Ihrer vorhandenen Toolkette kopieren.

Kann ich eigene/spezifische Flags für die Neuerstellung von Bibliotheken verwenden?

Ja. In der aktuellen Version gibt es noch keine standardisierte globale Möglichkeit, sie zu ändern. Sie können jedoch einzelne Portdateien bearbeiten und den genauen Buildprozess optimieren, wie Sie möchten.

Indem Sie die Änderungen in der Portdatei speichern (und diese einchecken), erhalten Sie dieselben Ergebnisse, auch wenn Sie in Zukunft neu erstellen und vergessen haben, welche genauen Einstellungen Sie verwendet haben.

Kann ich die vcpkg-Integration für benutzerdefinierte Konfigurationen erhalten?

Ja. Während vcpkg beim Erstellen einer Bibliothek nur die Standardkonfigurationen "Release" und "Debug" erstellt, können Sie zusätzlich zu den Standardkonfigurationen Ihres Projekts Integrationsunterstützung für die benutzerdefinierten Konfigurationen Ihres Projekts erhalten.

Zunächst übernimmt vcpkg automatisch jede benutzerdefinierte Konfiguration, die mit "Release" (bzw. "Debug") beginnt, als Konfiguration, die mit der Standardkonfiguration "Release" (bzw. "Debug") kompatibel ist und entsprechend reagiert.

Bei anderen Konfigurationen müssen Sie das MSBuild-Makro $(VcpkgConfiguration) nur in Ihrer Projektdatei (.vcxproj) außer Kraft setzen, um die Kompatibilität zwischen Der Konfiguration und der Zielstandardkonfiguration zu deklarieren. Leider müssen Sie aufgrund der sequenziellen Art von MSBuild diese Einstellungen in Ihrem vcxproj viel höher hinzufügen, damit sie deklariert wird, bevor die vcpkg-Integration geladen wird. Es wird empfohlen, das $(VcpkgConfiguration) Makro der PropertyGroup "Globals" hinzuzufügen.

Sie können beispielsweise Unterstützung für Ihre "MyRelease"-Konfiguration hinzufügen, indem Sie Ihre Projektdatei hinzufügen:

<PropertyGroup Label="Globals">
  ...
  <VcpkgConfiguration Condition="'$(Configuration)' == 'MyRelease'">Release</VcpkgConfiguration>
</PropertyGroup>

Dies erzeugt natürlich nur praktikable Binärdateien, wenn Ihre benutzerdefinierte Konfiguration mit der Zielkonfiguration kompatibel ist (z. B. sollten beide mit derselben Laufzeitbibliothek verknüpft werden).

Ich kann keine benutzerweite Integration verwenden. Kann ich eine Projektintegration pro Projekt verwenden?

Ja. Ein NuGet-Paket, das für die Pro-Projekt-Verwendung geeignet ist, kann entweder über den vcpkg integrate project Befehl (einfache Verknüpfung) oder den vcpkg export --nuget Befehl (Shrinkwrapped) generiert werden.

Ein Mechanismus auf niedrigerer Ebene, um das gleiche wie das vcpkg integrate project NuGet-Paket zu erreichen, erfolgt über die <vcpkg_root>\scripts\buildsystems\msbuild\vcpkg.targets Datei. Sie müssen sie lediglich in Ihrer .vcxproj-Datei importieren und durch den Pfad ersetzen <vcpkg_root> , in dem Sie vcpkg installiert haben:

<Import Project="<vcpkg_root>\scripts\buildsystems\msbuild\vcpkg.targets" />

Wie kann ich temporäre Dateien entfernen?

Wenn Sie sich nur um die installierten Pakete kümmern, ist es sicher, die folgenden Verzeichnisse im vcpkg-Stammordner zu löschen:

  • packages,
  • buildtrees,
  • und downloads geändert.

Sie können das --clean-after-build Flag in Ihrem vcpkg install Befehl verwenden, um die temporären Dateien nach Abschluss des Builds automatisch zu löschen.

vcpkg verwendet auch andere temporäre Speicherorte außerhalb des vcpkg-Stammordners. Die Visual Studio-Integrationsdateien, standardmäßiger binärer Cache und Registrierungscache; alle befinden sich je nach operativem System im folgenden Pfad:

Unter Windows:

  • %LocalAppData%/vcpkg

Unter Linux/macOS:

  • $XDG_CACHE_HOME/vcpkg
  • ~/.cache/vcpkg (nur wenn XDG_CACHE_HOME nicht definiert)

Wenn Sie lokale Binär- oder Objektcaches konfiguriert haben, sollten Sie diese ggf. bei Bedarf regelmäßig bereinigen.

Wie wird CMake intern von vcpkg verwendet?

vcpkg verwendet CMake intern als Buildskriptingsprache. Dies liegt daran, dass CMake bereits ein extrem gängiges Buildsystem für plattformübergreifende Open Source-Bibliotheken ist und im Allgemeinen für C++-Projekte sehr beliebt wird. Es ist einfach, unter Windows zu erwerben, erfordert keine systemweite Installation und ist für nicht vertraute Benutzer lesbar.

Unterstützt vcpkg das Herunterladen kompilierter Binärdateien von einem öffentlichen oder privaten Server?

Es wird empfohlen, Ihre Bibliotheken einmal mit Ihren bevorzugten Buildkonfigurationen zu erstellen und das Feature für die binäre Zwischenspeicherung zum erneuten Verwenden von Binärdateien zu verwenden, ohne jedes Mal neu erstellen zu müssen. Dies ist nützlich, wenn Sie an einem Teamprojekt arbeiten oder wenn Sie sowohl lokal als auch in einer kontinuierlichen Integrationsumgebung auf mehreren Computern, Containern, virtuellen Computern usw. erstellen.

Welche MSVC-Toolsets werden unterstützt?

Wir unterstützen Visual Studio 2015 Update 3 und höher.

Warum verwendet Visual Studio meine Bibliotheken nicht mit aktivierter benutzerweiter Integration?

Durch aktivieren der benutzerweiten Integration (vcpkg integrate install) wird die Standardeinstellung für einige Projekteigenschaften geändert. Insbesondere sind "C/C++/General/Additional Include Directories" und "Linker/General/Additional Library Directories" normalerweise leer ohne benutzerweite Integration. Bei der Integration bedeutet ein leerer Wert, dass die von vcpkg bereitgestellte erweiterte Standardeinstellung außer Kraft gesetzt wird, und Header/Bibliotheken werden nicht gefunden. Um den Standardwert wieder einzustellen, legen Sie die Eigenschaften fest, die vom übergeordneten Element geerbt werden sollen.

Warum nicht NuGet?

NuGet ist ein Paket-Manager für .NET-Bibliotheken mit einer starken Abhängigkeit von MSBuild. Sie erfüllt nicht die spezifischen Anforderungen nativer C++-Kunden auf mindestens drei Arten.

  • Kompilierungsaromen. Mit so vielen möglichen Kombinationen von Kompilierungsoptionen ist die Aufgabe, einen wirklich vollständigen Satz von Optionen bereitzustellen, systemintern unmöglich. Darüber hinaus wird die Downloadgröße für vernünftig vollständige Binärpakete enorm. Dies macht es erforderlich, die Ergebnisse in mehrere Pakete aufzuteilen, aber dann wird die Suche sehr schwierig.

  • Binär- und Quelldatei. NuGet ist sehr eng mit dem ersten Punkt verknüpft, ist von Grund auf so konzipiert, dass es relativ kleine, vordefinierte Binärdateien bereitstellt. Aufgrund der Art von systemeigenem Code müssen Entwickler Zugriff auf den Quellcode haben, um die ABI-Kompatibilität, Leistung, Integrität und Debugbarkeit sicherzustellen.

  • Pro-DLL und Pro-Anwendung. NuGet ist sehr projektorientiert. Dies funktioniert gut in verwalteten Sprachen mit natürlich stabilen ABIs, da Basisbibliotheken weiter entwickelt werden können, ohne diese höher aufzuteilen. In nativen Sprachen, in denen die ABI viel fragiler ist, besteht die einzige robuste Strategie darin, jede Bibliothek explizit mit den genauen Abhängigkeiten zu erstellen, die in der endgültigen Anwendung enthalten sein werden. Dies ist schwierig, in NuGet sicherzustellen und führt zu einem stark getrennten und unabhängigen Versionsökosystem.

Warum nicht Conan?

Conan.io ist ein öffentlich verbundener, projektorientierter, plattformübergreifender C++-Paket-Manager, der in Python geschrieben wurde. Unsere hauptunterschiede sind:

  • Öffentlicher Partnerverbund im Vergleich zum privaten Partnerverbund. Conan stützt sich auf Einzelpersonen, die unabhängige Kopien jedes Pakets veröffentlichen. Wir glauben, dass dieser Ansatz eine große Anzahl von Paketen fördert, die alle auf unterschiedliche Weise zerbrochen sind. Wir glauben, dass es eine Verschwendung von Zeit für benutzer ist, die Liste der 20+ öffentlichen Pakete für Boost 1.56 zu wählen, um die Handvoll zu bestimmen, die für ihre bestimmte Situation funktioniert. Im Gegensatz dazu sind wir der Ansicht, dass es eine einzige, gemeinsam verwaltete Version geben sollte, die für die überwiegende Mehrheit der Fälle funktioniert und es Benutzern ermöglicht, frei auf ihre privaten Versionen zu hacken. Wir glauben, dass dies zu einer Reihe von hochwertigen Paketen führen wird, die stark miteinander getestet werden und eine fantastische Basis für alle privaten Änderungen bilden, die Sie benötigen.

  • Pro-DLL und Pro-Anwendung. Wenn Abhängigkeiten unabhängig auf Bibliotheksebene versioniert werden, empfiehlt es sich, jede Buildumgebung vollständig einzigartig zu sein, die nicht in der Lage ist, ein solides, gut getestetes Ökosystem zu nutzen oder zu einem soliden, gut getesteten Ökosystem beizutragen. Im Gegensatz dazu hoffen wir, dass wir durch die Gemeinsame Versionsverwaltung aller Bibliotheken als Plattform (ähnlich wie ein Systempaket-Manager) Tests und Anstrengungen für sehr gemeinsame Gruppen von Bibliotheksversionen durchführen, um die Qualität und Stabilität des Ökosystems zu maximieren. Dies entwirft auch vollständig die Möglichkeit, dass eine Bibliothek Nach Versionen fragt, die mit den Auswahlmöglichkeiten der Anwendung in Konflikt stehen (ich möchte öffnensl Z und boost X, aber X nur Ansprüche für die Arbeit mit openssl Y).

  • Plattformübergreifend im Vergleich zu einer plattformübergreifenden Plattform. Während wir auf vielen Plattformen gehostet werden, ist ein ausgezeichneter Nordstern, wir glauben, dass das Niveau der Systemintegration und Stabilität, die von apt-get, yum und homebrew bereitgestellt wird, sich gut mit brew install boost automatisierten Skripts austauschen apt-get install libboost-all-dev muss. Wir haben uns entschieden, unser System so einfach wie möglich in eine Welt zu integrieren, mit diesen sehr erfolgreichen Systemmanagern - eine weitere Linie für vcpkg install boost -- anstatt sie zu ersetzen, wo sie bereits so erfolgreich und geliebt sind.

  • C++/CMake vs python. Während Python eine hervorragende Sprache ist, die von vielen geliebt wird, glauben wir, dass Transparenz und Vertrautheit die wichtigsten Faktoren sind, wenn Sie ein Tool als Paketmanager für Ihren Workflow auswählen. Daher haben wir beschlossen, die Implementierungssprachen so universell wie möglich zu akzeptieren: C++ sollte in einem C++-Paket-Manager für C++-Programmierer verwendet werden. Sie sollten nicht erforderlich sein, eine andere Programmiersprache zu erlernen, nur um Ihren Paket-Manager zu verstehen.

Warum nicht Chocolatey?

Chocolatey ist ein hervorragendes System für die Verwaltung von Anwendungen. Es ist jedoch derzeit nicht für den Erwerb von weiterverteilbaren Entwicklerressourcen vorgesehen und hilft Ihnen beim Debuggen. vcpkg ist im Vergleich dazu konzipiert, Ihnen die Bibliotheken zu bieten, die Sie benötigen, um Ihre Anwendung zu erstellen und Ihnen bei der Bereitstellung über jede plattform zu helfen, die Sie wünschen (einschließlich Chocolatey!).