訓練
模組
建立新的 .NET 專案並使用套件相依性 - Training
建立 .NET 專案,並了解如何在專案中新增套件及管理套件相依性。 使用 .NET Core CLI 與 NuGet 登錄,透過 Visual Studio Code 將程式庫與工具新增至您的 C# 應用程式。
本教學課程會引導您使用自定義重疊修改 vcpkg 埠。 建議您先閱讀封裝連結庫的教學課程,再繼續進行。
在本教學課程中,您將瞭解如何:
第一個步驟是建立 您想要修改之套件的重迭埠 。
重迭埠目錄可以在您選擇的任何文件系統位置中建立。 在本教學課程的任何步驟中,將 取代 $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"
若要取得您要修改之埠的原始程式碼,請執行下列命令:
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
這是埠原始程式碼的位置。
初始化原始碼位置中的暫存 Git 存放庫。 這是為了使用 Git 來產生您可以在腳本中套用的 portfile.cmake
修補程式檔案。 將取代 $SOURCE_PATH
為上一個步驟中取得的位置。
cd "$SOURCE_PATH"
git init
git add .
git commit -m "Initial commit"
變更下列原始碼檔案,將動態連結庫支援新增至 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
從add_library()
呼叫中移除STATIC
。
add_library(my_sample_lib my_sample_lib.cpp)
在建置為共用連結庫時新增編譯定義。
if (BUILD_SHARED_LIBS)
target_compile_definitions(my_sample_lib PRIVATE MYLIB_EXPORTS)
endif()
在原始碼目錄中,執行下列命令來產生修補程式檔案。
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);
變更 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)
執行以下命令:
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
就這麼簡單! 您已使用修補程式檔案安裝本機修改的相依性。
以下是接下來要嘗試的一些工作:
訓練
模組
建立新的 .NET 專案並使用套件相依性 - Training
建立 .NET 專案,並了解如何在專案中新增套件及管理套件相依性。 使用 .NET Core CLI 與 NuGet 登錄,透過 Visual Studio Code 將程式庫與工具新增至您的 C# 應用程式。
文件
本文說明 vcpkg 中的重迭埠。 重迭埠可用來強制 vcpkg 在套件安裝程式期間使用特定的埠定義。
瞭解如何使用重迭三胞胎在 Linux 上建置共用程式庫。
瞭解如何在 vcpkg 中封裝 libogg GitHub 存放庫。