Руководство. Установка локально измененной зависимости
В этом руководстве описано изменение порта vcpkg с помощью пользовательских наложений. Прежде чем продолжить, рекомендуется ознакомиться с руководством по упаковке библиотеки .
Из этого руководства вы узнаете следующее:
Необходимые компоненты
- Терминал
- vcpkg
- Git
- Компилятора C++
- Завершение руководства по упаковке
1. Создание порта наложения
Первым шагом является создание порта наложения пакета, который требуется изменить.
Создание каталога для хранения портов наложения
Каталог портов наложения можно создать в любом расположении файловой системы выбранного расположения. В любом шаге этого руководства замените $OVERLAY_LOCATION
выбранным расположением.
mkdir "$OVERLAY_LOCATION"
mkdir "$OVERLAY_LOCATION"
Скопируйте содержимое порта в каталог портов наложения
В этом руководстве вы измените vcpkg-sample-library
порт в руководстве по упаковке, чтобы добавить поддержку динамической библиотеки.
Copy-Item -Path <path/to/vcpkg-sample-library> -Destination "$OVERLAY_LOCATION" -Recurse
xcopy <path/to/vcpkg-sample-library> "$OVERLAY_LOCATION" /E
cp -R <path/to/vcpkg-sample-library> "$OVERLAY_LOCATION"
2. Получение исходного кода порта
Чтобы получить исходный код для порта, который требуется изменить, выполните следующую команду:
vcpkg install "--overlay-ports=$OVERLAY_LOCATION" vcpkg-sample-library --editable
Выходные данные должны содержать строку, аналогичную следующей:
-- Using source at path/to/vcpkg/buildtrees/vcpkg-sample-library/src/1.0.0-b54c55c215
Это расположение исходного кода порта.
3. Создание временного реестра Git
Инициализация временного репозитория Git в расположении исходного кода. Это позволяет использовать Git для создания файлов исправлений, которые можно применить в скрипте portfile.cmake
. Замените $SOURCE_PATH
расположение, полученное на предыдущем шаге.
cd "$SOURCE_PATH"
git init
git add .
git commit -m "Initial commit"
4. Изменение необходимых файлов
Измените следующие файлы исходного кода, чтобы добавить поддержку vcpkg-sample-library
динамической библиотеки.
my_sample_lib.h
#pragma once
#include <string>
#if MYLIB_EXPORTS
__declspec(dllexport)
#endif
std::string greet(const std::string& name);
CMakeLists.txt
Удалите STATIC
из add_library()
вызова.
add_library(my_sample_lib my_sample_lib.cpp)
Добавьте определение компиляции при создании в качестве общей библиотеки.
if (BUILD_SHARED_LIBS)
target_compile_definitions(my_sample_lib PRIVATE MYLIB_EXPORTS)
endif()
5. Создание файла исправления
В каталоге исходного кода выполните следующую команду, чтобы создать файл исправлений.
git diff > "$OVERLAY_LOCATION/vcpkg-sample-library/add-dynamic-lib-support.patch"
При этом создается файл с именем add-dynamic-lib-support.patch
в порту наложения с содержимым, аналогичным:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2b42f71..b347b53 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,11 +6,15 @@ project(my_sample_lib)
find_package(fmt CONFIG REQUIRED)
# Add your library
-add_library(my_sample_lib STATIC my_sample_lib.cpp)
+add_library(my_sample_lib my_sample_lib.cpp)
# Link your library to fmt
target_link_libraries(my_sample_lib PRIVATE fmt::fmt)
+if (BUILD_SHARED_LIBS)
+ target_compile_definitions(my_sample_lib PRIVATE MYLIB_EXPORTS)
+endif()
+
# Add include directories
target_include_directories(my_sample_lib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> # for headers when building
diff --git a/my_sample_lib.h b/my_sample_lib.h
index d6d70b8..0b62141 100644
--- a/my_sample_lib.h
+++ b/my_sample_lib.h
@@ -2,4 +2,7 @@
#include <string>
+#if MYLIB_EXPORTS
+__declspec(dllexport)
+#endif
std::string greet(const std::string& name);
6. Изменение portfile.cmake
для применения исправления
Измените portfile.cmake
ограничение и примените исправление ONLY_STATIC_LIBRARY
к исходному коду.
portfile.cmake
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO Microsoft/vcpkg-docs
REF "${VERSION}"
SHA512 3f206cc2fe61d9c97c82b30852e1e4e6df299d93f6159edd1e56c644fa03ccc4670f7681e356d0e3db898a74e099a1ec531821df5430a7b14d61c743c5aa8c30
HEAD_REF cmake-sample-lib
PATCHES
"add-dynamic-lib-support.patch"
)
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
)
vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_cmake_config_fixup(PACKAGE_NAME "my_sample_lib")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(
INSTALL "${SOURCE_PATH}/LICENSE"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}"
RENAME copyright
)
configure_file("${CMAKE_CURRENT_LIST_DIR}/usage" "${CURRENT_PACKAGES_DIR}/share/${PORT}/usage" COPYONLY)
7. Установка порта наложения
Выполните следующую команду:
vcpkg install "--overlay-ports=$OVERLAY_LOCATION" vcpkg-sample-library
Обязательно удалите --editable
флаг, чтобы файл исправлений применялось к чистой копии исходного кода. Вы увидите строку о применении файла исправлений к исходному коду в выходных данных:
-- Cleaning sources at D:/Work/vcpkg/buildtrees/vcpkg-sample-library/src/1.0.0-8f646312ed.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source D:/Work/vcpkg/downloads/Microsoft-vcpkg-docs-1.0.0.tar.gz
-- Applying patch add-dynamic-lib-support.patch
Следующие шаги
Вот и все! Вы установили локально измененную зависимость с помощью файла исправлений.
Ниже приведены некоторые задачи, которые необходимо выполнить следующим образом:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по