Autorhilfeports
Hilfsports, auch als Skriptports bezeichnet, machen Funktionen für andere Ports verfügbar, die während des Buildprozesses verwendet werden. Beispielsweise definiert der vcpkg-cmake
Port die vcpkg_cmake_configure()
Funktion für andere Ports, die verwendet werden sollen. Durch das Packen allgemeiner Skripts in einen Hilfsport wird Standard Tenance optimiert, da Updates an einem einzigen Ort vorgenommen werden können. Darüber hinaus können Hilfsports versionsgesteuert und abhängig von der Verwendung der gleichen Mechanismen wie reguläre Ports sein.
Wie funktionieren sie?
Hilfsports werden über den vcpkg-port-config.cmake
Erweiterungsmechanismus implementiert.
Bevor ein Port ausgeführt wird, importiert vcpkg alle vcpkg-port-config.cmake
Dateien, die von den direkten Abhängigkeiten des Ports exportiert wurden, um ausgeführt zu werden.
Wenn ein Hilfsport von einem anderen Hilfsport abhängt, muss die vcpkg-port-config.cmake
Datei der Abhängigkeit explizit importiert werden. Hilfs-zu-Hilfsportabhängigkeiten sollten nicht als Hostabhängigkeiten gekennzeichnet werden. Dadurch wird sichergestellt, dass ein Skript von dem anderen abhängig sein kann, der sich im selben Installationsverzeichnis befindet.
Ports, die von einem Hilfsport abhängig sind, sollten die Abhängigkeit als Hostabhängigkeit kennzeichnen.
Hilfsports müssen ihre vcpkg-port-config.cmake
Datei immer in einem share/${PORT}
Unterverzeichnis in der Installationsstruktur installieren.
Beispiel: Schreiben eines einfachen Hilfsports
1 – Erstellen Sie eine CMake-Datei, die die Hilfsfunktion definiert.
my-helper/my_helper_function.cmake
include_guard(GLOBAL)
function(my_helper_function)
message(STATUS "my_helper_function() was called")
my_other_helper_function()
endfunction()
Der include_guard(GLOBAL)
obere Rand der Datei schützt vor der Neudefinition dieser Funktion, wenn die Datei mehrmals enthalten ist.
In den folgenden Zeilen wird eine Funktion mit dem Namen my_helper_function
deklariert, die eine Nachricht anzeigt und die my_other_helper_function
in einem anderen Hilfsport definierten Aufrufe aufruft.
2 – Erstellen der Hilfsportdatei porftile.cmake
my-helper/portfile.cmake
set(VCPKG_POLICY_HELPER_PORT enabled)
file(INSTALL
"${CMAKE_CURRENT_LIST_DIR}/vcpkg-port-config.cmake"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${VCPKG_ROOT_DIR}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
Durch aktivieren der VCPKG_POLICY_HELPER_PORT
Richtlinie ermöglicht vcpkg Postbuildprüfungen, die speziell auf Hilfsports angewendet werden. Überprüfen Sie insbesondere, ob sie vcpkg-port-config.cmake
im richtigen Pfad installiert ist und dass keine Dateien im include
Verzeichnis installiert sind.
Die nächsten Zeilen installieren die erforderlichen vcpkg-port-config.cmake
Dateien an copyright
ihrem richtigen Speicherort (share/${PORT}
).
3 – Erstellen der Hilfsportdatei vcpkg.json
my-helper/vcpkg.json
{
"name": "my-helper",
"version-date": "2024-03-20",
"description": "Provide my_helper_function()",
"license": "MIT",
"dependencies": [
{ "name": "my-other-helper" }
]
}
Wir empfehlen die Verwendung version-date
als Versionsverwaltungsschema für Hilfsports.
Das dependencies
in diesem Beispiel enthält einen Verweis auf einen anderen Hilfsport mit dem Namen my-other-helper
. Die Abhängigkeit ist absichtlich nicht als Hostabhängigkeit gekennzeichnet, da dies eine Hilfs-zu-Hilfsport-Abhängigkeit ist.
4 – Erstellen der Hilfsportdatei vcpkg-port-config.cmake
my-helper/vcpkg-port-config.cmake
include_guard(GLOBAL)
include("${CMAKE_CURRENT_LIST_DIR}/../my-other-helper/vcpkg-port-config.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/my_helper_function.cmake")
Die vcpkg-port-config.cmake
Datei besteht aus drei Zeilen, der erste ist ein globaler Include Guard, der verhindert, dass die Datei mehrmals eingeschlossen wird.
Die zweite Zeile enthält my-other-helper/vcpkg-port-config.cmake
, um die Funktionen für my-other-helper
Ports verfügbar zu machen, die davon my-helper
abhängen, ohne dass sie in ihre Liste der direkten Abhängigkeiten einbezogen my-other-helper
werden müssen.
Schließlich ist die Datei, die my_helper_function.cmake
die my_helper_function
Definition enthält, enthalten.
5 – Verwenden my-helper
in einem Manifest
Jeder Verbraucher my-helper
muss nur eine direkte Abhängigkeit my-helper
von sich selbst enthalten, es ist keine Abhängigkeit my-other-helper
erforderlich. Das verwendende Manifest sollte die Abhängigkeit als Hostabhängigkeit kennzeichnen.
my-port/vcpkg.json
{
"name": "my-port",
"version": "1.0.0",
"dependencies": [
{
"name": "my-helper",
"host": true
}
]
}
Dadurch wird my_helper_function
in my-port/portfile.cmake
.
my-port/portfile.cmake
my_helper_function()