도우미 포트 작성
스크립트 포트라고도 하는 도우미 포트는 빌드 프로세스 중에 사용할 다른 포트에 대한 함수를 노출합니다. 예를 들어 포트는 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()
vcpkg