Yardımcı bağlantı noktaları yazma
Betik bağlantı noktaları olarak da adlandırılan yardımcı bağlantı noktaları, derleme işlemleri sırasında diğer bağlantı noktalarının kullanmasına yönelik işlevleri kullanıma sunar. Örneğin, vcpkg-cmake
bağlantı noktası diğer bağlantı noktalarının vcpkg_cmake_configure()
kullandırdığı işlevi tanımlar. Sık kullanılan betikleri bir yardımcı bağlantı noktasına paketleyerek, güncelleştirmeler tek bir konumda yapılabilmesi sayesinde bakım daha kolay hale gelir. Ayrıca yardımcı bağlantı noktaları, normal bağlantı noktalarıyla aynı mekanizmaların kullanılmasına bağlı olarak sürüm oluşturulabilir ve bağımlı olabilir.
Nasıl çalışırlar?
Yardımcı bağlantı noktaları uzantı mekanizması aracılığıyla vcpkg-port-config.cmake
uygulanır.
Bir bağlantı noktası yürütülmeden önce, vcpkg yürütülmek üzere olan bağlantı noktasının doğrudan bağımlılıkları tarafından dışarı aktarılan tüm vcpkg-port-config.cmake
dosyaları içeri aktarır.
Bir yardımcı bağlantı noktası farklı bir yardımcı bağlantı noktasına bağımlıysa, bağımlılığının vcpkg-port-config.cmake
dosyasını açıkça içeri aktarması gerekir. Yardımcıdan yardımcıya bağlantı noktası bağımlılıkları konak bağımlılıkları olarak işaretlenmemelidir; bu, bir betiğin diğerinin aynı yükleme dizininde olmasına bağlı olmasını sağlar.
Bir yardımcı bağlantı noktasına bağımlı bağlantı noktaları, bağımlılığı konak bağımlılığı olarak işaretlemelidir.
Yardımcı bağlantı noktalarının dosyalarını her zaman yükleme ağacındaki bir share/${PORT}
alt dizine yüklemeleri vcpkg-port-config.cmake
gerekir.
Örnek: Basit bir yardımcı bağlantı noktası yazma
1 - Yardımcı işlevini tanımlayan bir CMake dosyası oluşturun.
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()
include_guard(GLOBAL)
Dosyanın en üstündeki, dosya birden çok kez eklendiğinde bu işlevin yeniden tanımlanmasına karşı koruma sağlar.
Aşağıdaki satırlar, bir ileti görüntüleyen ve farklı bir yardımcı bağlantı noktasında tanımlanan öğesini çağıran my_other_helper_function
adlı my_helper_function
bir işlev bildirir.
2 - Yardımcı bağlantı noktasının porftile.cmake
dosyasını oluşturma
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)
vcpkg, ilkeyi VCPKG_POLICY_HELPER_PORT
etkinleştirerek özellikle yardımcı bağlantı noktaları için geçerli olan derleme sonrası denetimleri etkinleştirir. Özellikle, doğru yolda yüklü olup olmadığını ve dizinde include
hiçbir dosya yüklenmediğini denetlervcpkg-port-config.cmake
.
Sonraki satırlar gerekli vcpkg-port-config.cmake
ve copyright
dosyaları doğru konumlarına (share/${PORT}
) yükler.
3 - Yardımcı bağlantı noktasının vcpkg.json
dosyasını oluşturma
my-helper/vcpkg.json
{
"name": "my-helper",
"version-date": "2024-03-20",
"description": "Provide my_helper_function()",
"license": "MIT",
"dependencies": [
{ "name": "my-other-helper" }
]
}
Yardımcı bağlantı noktaları için sürüm oluşturma şeması olarak kullanmanızı version-date
öneririz.
dependencies
Bu örnekte adlı başka bir yardımcı bağlantı noktasına my-other-helper
başvuru içerir. Bağımlılık, yardımcıdan yardımcıya bağlantı noktası bağımlılığı olduğundan, özellikle konak bağımlılığı olarak işaretlenmez.
4 - Yardımcı bağlantı noktasının vcpkg-port-config.cmake
dosyasını oluşturma
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")
Dosya vcpkg-port-config.cmake
üç satırdan oluşur; birincisi, dosyanın birden çok kez eklenmesini engelleyen genel bir include guard'dır.
İkinci satırmy-other-helper/vcpkg-port-config.cmake
, my-other-helper
içindeki işlevleri doğrudan bağımlılıklar listesine dahil my-other-helper
etmek zorunda kalmadan bağlı my-helper
olan bağlantı noktaları için kullanılabilir hale getirmektir.
Son olarak, my_helper_function.cmake
tanımı içeren my_helper_function
dosya eklenir.
5 - Bildirimde kullanma my-helper
Yalnızca herhangi bir tüketicinin my-helper
kendisine doğrudan bağımlılık içermesi my-helper
gerekir, bağımlılığı my-other-helper
gerekmez. Tüketen bildirim, bağımlılığı konak bağımlılığı olarak işaretlemelidir.
my-port/vcpkg.json
{
"name": "my-port",
"version": "1.0.0",
"dependencies": [
{
"name": "my-helper",
"host": true
}
]
}
Bu, içinde my-port/portfile.cmake
kullanılabilir hale getirirmy_helper_function
.
my-port/portfile.cmake
my_helper_function()