Aracılığıyla paylaş


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-helperbaş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.cmakedosyası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.cmakekullanılabilir hale getirirmy_helper_function.

my-port/portfile.cmake

my_helper_function()