다음을 통해 공유


도우미 포트 작성

스크립트 포트라고도 하는 도우미 포트는 빌드 프로세스 중에 사용할 다른 포트에 대한 함수를 노출합니다. 예를 들어 포트는 vcpkg-cmake 사용할 다른 포트에 대한 함수를 정의합니다 vcpkg_cmake_configure() . 일반적인 스크립트를 도우미 포트에 패키징하면 단일 위치에서 업데이트를 수행할 수 있으므로 기본 테넌스가 더욱 간소화됩니다. 또한 도우미 포트의 버전을 지정하고 일반 포트와 동일한 메커니즘을 사용하는 방법에 따라 달라질 수 있습니다.

어떻게 작동합니까?

도우미 포트는 확장 메커니즘을 vcpkg-port-config.cmake 통해 구현됩니다.

포트를 실행하기 전에 vcpkg는 실행될 포트의 직접 종속성에 의해 내보낸 모든 vcpkg-port-config.cmake 파일을 가져옵니다.

도우미 포트가 다른 도우미 포트에 종속된 경우 종속성 파일을 명시적으로 가져와 vcpkg-port-config.cmake 야 합니다. 도우미-도우미 포트 종속성은 호스트 종속성으로 표시되지 않아야 합니다. 이렇게 하면 한 스크립트가 동일한 설치 디렉터리에 있는 다른 스크립트에 종속될 수 있습니다.

도우미 포트에 종속된 포트는 종속성을 호스트 종속성으로 표시해야 합니다.

도우미 포트는 항상 설치 트리share/${PORT} 하위 디렉터리에 해당 파일을 설치 vcpkg-port-config.cmake 해야 합니다.

예: 간단한 도우미 포트 작성

1 - 도우미 함수를 정의하는 CMake 파일을 만듭니다.

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) 파일이 여러 번 포함될 때 파일 맨 위에 있는 이 함수를 다시 정의하지 않도록 보호합니다.

다음 줄은 메시지를 표시하고 다른 도우미 포트에 정의된 함수를 my_other_helper_function 호출하는 함수 my_helper_function 를 선언합니다.

2 - 도우미 포트의 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)

정책을 사용하도록 설정 VCPKG_POLICY_HELPER_PORT 하면 vcpkg는 도우미 포트에 특별히 적용되는 빌드 후 검사 사용하도록 설정합니다. 특히 올바른 vcpkg-port-config.cmake 경로에 설치되고 디렉터리에 파일이 설치 include 되지 않은 검사.

다음 줄은 필요한 vcpkg-port-config.cmake 파일과 copyright 파일을 올바른 위치(share/${PORT})에 설치합니다.

3 - 도우미 포트의 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" } 
  ]
}

도우미 포트의 버전 관리 체계로 사용하는 version-date 것이 좋습니다.

dependencies 예제에서는 이름이 my-other-helper다른 도우미 포트에 대한 참조를 포함합니다. 종속성은 도우미-도우미 포트 종속성이므로 의도적으로 호스트 종속성으로 표시되지 않습니다.

4 - 도우미 포트의 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")

파일은 vcpkg-port-config.cmake 세 줄로 구성되며, 첫 번째는 파일이 여러 번 포함되지 않도록 하는 전역 include guard입니다.

두 번째 줄에는 직접 종속성 목록에 포함 my-other-helper 할 필요 없이 종속 my-helper 된 포트에서 함수 my-other-helper 를 사용할 수 있도록 하는 것이 포함 my-other-helper/vcpkg-port-config.cmake 됩니다.

마지막으로 정의가 my_helper_function.cmake 포함된 my_helper_function 파일이 포함됩니다.

5 - 매니페스트에서 사용 my-helper

모든 소비자 my-helper 는 자체에 대한 직접 종속성을 포함해야 my-helper 하며 종속성이 my-other-helper 필요하지 않습니다. 소비 매니페스트는 종속성을 호스트 종속성으로 표시해야 합니다.

my-port/vcpkg.json

{
  "name": "my-port",
  "version": "1.0.0",
  "dependencies": [
    {
      "name": "my-helper",
      "host": true
    }
  ]
}

이 기능은 my_helper_function .에서 my-port/portfile.cmake사용할 수 있습니다.

my-port/portfile.cmake

my_helper_function()