Öğretici: Bildirim dosyasından bağımlılık yükleme
vcpkg iki işlem moduna sahiptir: klasik mod ve bildirim modu. Bu makalede, çoğu kullanıcı için önerilen iş akışı olan bildirim modunu kullanarak paketlerin nasıl yükleneceği açıklanmaktadır.
Bildirim modunda, projenizin doğrudan bağımlılıklarını adlı vcpkg.json
bir bildirim dosyasında bildirirsiniz.
Bildirim dosyalarının, tüm paketlerin ortak %VCPKG_ROOT%/installed
bir dizine yüklendiği klasik moddan farklı olarak bağımlılıkları yükledikleri kendi vcpkg_installed
dizinleri vardır. Bu nedenle, her projenin kendi bildirimi ve diğer projelerin bağımlılıklarıyla çakışmayan kendi bağımlılık kümesi olabilir.
Bildirim modu, sürüm oluşturma ve özel kayıt defterleri gibi gelişmiş özellikleri kullanmak için de gereklidir.
Bu öğreticide şunların nasıl yapıldığını öğrenirsiniz:
- vcpkg
- Terminal
- Kod düzenleyicisi
- C++ derleyicisi
- (İsteğe bağlı) CMake veya MSBuild
Yeni bir klasörde şu içeriklere sahip adlı main.cxx
bir kaynak dosya oluşturun:
#include <cxxopts.hpp>
#include <fmt/format.h>
#include <range/v3/view.hpp>
namespace view = ranges::views;
int fib(int x)
{
int a = 0, b = 1;
for (int it : view::repeat(0) | view::take(x))
{
(void)it;
int tmp = a;
a += b;
b = tmp;
}
return a;
}
int main(int argc, char **argv)
{
cxxopts::Options options("fibo", "Print the fibonacci sequence up to a value 'n'");
options.add_options()("n,value", "The value to print to", cxxopts::value<int>()->default_value("10"));
auto result = options.parse(argc, argv);
auto n = result["value"].as<int>();
for (int x : view::iota(1) | view::take(n))
{
fmt::print("fib({}) = {}\n", x, fib(x));
}
}
Kod, içindeki vcpkg genel kayıt defterinde https://github.com/Microsoft/vcpkgbulunan açık kaynak kitaplıklarına başvurur: cxxopts
, fmt
ve range-v3
;
Bu bağımlılıkları bildirmek için projenizle aynı dizinde adlı vcpkg.json
bir dosya oluşturun:
vcpkg.json
:
{
"dependencies": [
"cxxopts",
"fmt",
"range-v3"
]
}
Yalnızca listede doğrudan bağımlılıklarınızı "dependencies"
belirtmeniz gerekir. vcpkg çalıştığında gerekli geçişli bağımlılıkları çözümler ve yükler.
Bu adımda, projeyi her derlediğinizde proje bağımlılıklarınızın otomatik olarak yüklenmesi veya geri yüklenmesi için vcpkg'yi CMake veya MSBuild ile tümleştirmeyi göstereceğiz.
Farklı bir derleme sistemi kullanıyorsanız sonraki adıma geçin: Bağımlılıkları yükleme.
MSBuild projelerinizde vcpkg kullanmak için aşağıdaki komutu çalıştırın:
vcpkg integrate install
KOMUTUNU yalnızca MSBuild tümleştirmesini vcpkg integrate install
ilk kez etkinleştirmek istediğinizde çalıştırmanız gerekir. Bu, mevcut ve gelecekteki tüm projeleriniz için MSBuild tümleştirmesini etkinleştirir. MSBuild sistem genelinde tümleştirmeyi kaldırmak için kullanın vcpkg integrate remove
.
Bu tümleştirme yöntemi, vcpkg yüklü paketleri aşağıdaki proje özelliklerine otomatik olarak ekler: Include Directories
, Link Directories
ve Link Libraries
. Ayrıca bu, gerekli DLL'lerin derleme çıktı klasörüne kopyalanmasını sağlayan bir derleme sonrası eylemi oluşturur. Bu, Visual Studio 2015 veya daha yeni bir sürümünü kullanan tüm çözümler ve projeler için çalışır.
CMake veya MSBuild kullanıyorsanız ve önceki adımı izlediyseniz, sonraki adıma atlayabilirsiniz: Projeyi derleme.
Farklı bir derleme sistemi kullanıyorsanız veya bağımlılıkları el ile yüklemek istiyorsanız tek yapmanız gereken bildirim dosyanızı içeren dizinde çalıştırmaktır vcpkg install
.
PS D:\projects\manifest-example> vcpkg install
Detecting compiler hash for triplet x64-windows...
The following packages will be built and installed:
cxxopts:x64-windows -> 3.1.1
fmt:x64-windows -> 10.0.0
range-v3:x64-windows -> 0.12.0#1
* vcpkg-cmake:x64-windows -> 2023-05-04
* vcpkg-cmake-config:x64-windows -> 2022-02-06#1
Additional packages (*) will be modified to complete this operation.
Installing 1/5 vcpkg-cmake-config:x64-windows...
Installing 2/5 vcpkg-cmake:x64-windows...
Installing 3/5 cxxopts:x64-windows...
Installing 4/5 fmt:x64-windows...
Installing 5/5 range-v3:x64-windows...
Total install time: 48 s
cxxopts provides CMake targets:
# this is heuristically generated, and may not be correct
find_package(cxxopts CONFIG REQUIRED)
target_link_libraries(main PRIVATE cxxopts::cxxopts)
The package fmt provides CMake targets:
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt)
# Or use the header-only version
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt-header-only)
range-v3 provides CMake targets:
# this is heuristically generated, and may not be correct
find_package(range-v3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE range-v3::meta range-v3::concepts range-v3::range-v3)
Komut tamamlandığında, tüm derlenmiş paketler bir vcpkg_installed
dizinde bulunur. Bu dizinin belirli konumu derleme sisteminize bağlıdır; genellikle, derleme sisteminin varsayılan çıkış klasörünün içinde veya dosyanızın vcpkg.json
yanında.
Varsayılan olarak, MSBuild projelerinde bildirim modu devre dışıdır.
Projenizde bildirimleri etkinleştirmek için dosyanızda .vcxproj
özelliğini ayarlayınVcpkgEnableManifest
:
<PropertyGroup Label="Vcpkg">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
</PropertyGroup>
Alternatif olarak, parametre olarak geçirerek msbuild /p:VcpkgEnableManifest=true
MSBuild çağrınızda bildirim modunu etkinleştirebilirsiniz.
PS D:\projects\manifest-example> msbuild /p:VcpkgEnableManifest=true
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/11/2023 11:29:50 AM.
Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Debug|x64".
Project "D:\projects\manifest-example\manifest-example.sln" (1) is building "D:\projects\manifest-example\manifest-example.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
(omitted)
InitializeBuildStatus:
(omitted)
ComputeStdModulesCompileInputs:
(omitted)
SetModuleDependencies:
Creating directory "x64\Debug\manifest.ceffc6eb_MD.tlog\".
VcpkgTripletSelection:
Using triplet "x64-windows" from "D:\projects\manifest-example\vcpkg_installed\x64-windows\x64-windows\"
Using normalized configuration "Debug"
VcpkgInstallManifestDependencies:
Installing vcpkg dependencies to D:\projects\manifest-example\vcpkg_installed\x64-windows\
Creating directory "D:\projects\manifest-example\vcpkg_installed\x64-windows\".
"D:\vcpkg\vcpkg.exe" install --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "D:\vcpkg\" "--x-manifest-root=D:\projects\manifest-example\" "--x-install-root=D:\projects\manifest-example\vcpkg_installed\x64-windows\"
"D:\vcpkg\vcpkg.exe" install --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "D:\vcpkg\" "--x-manifest-root=D:\projects\manifest-example\" "--x-install-root=D:\projects\manifest-example\vcpkg_installed\x64-windows\"
Detecting compiler hash for triplet x64-windows...
The following packages will be built and installed:
cxxopts:x64-windows -> 3.1.1
fmt:x64-windows -> 10.0.0
range-v3:x64-windows -> 0.12.0#1
* vcpkg-cmake:x64-windows -> 2023-05-04
* vcpkg-cmake-config:x64-windows -> 2022-02-06#1
(omitted)
ClCompile:
(omitted)
Link:
(omitted)
AppLocalFromInstalled:
pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manif
est-mode-msbuild\x64\Debug\manifest-example.exe" "D:\projects\manifest-example\vcpkg_installed\x64-windows\x64-windows\debug\bin"
"x64\Debug\manifest.ceffc6eb.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
(omitted)
Done Building Project "D:\projects\manifest-example\manifest-example.vcxproj" (default targets).
Done Building Project "D:\projects\manifest-example\manifest-example.sln" (default targets).
Build succeeded.
Bu kılavuzda, bir bildirim dosyası kullanarak basit bir proje için bağımlılıkları yüklemişsinizdir.
Şimdi deneyebileceğiniz bazı ek görevler şunlardır:
- Üçlüleri kullanarak özel platformlar, derleyiciler veya derleme mimarileri için paketleri yükleme
- Sürüm oluşturmayı kullanarak tekrarlanabilir derlemeler için sürümlerinizi kilitleme
- İkili önbelleğe alma kullanarak ikili dosyaları yerel veya sürekli tümleştirme çalıştırmaları arasında yeniden kullanma
- Özel kayıt defterlerini kullanarak özel kitaplıklarınızı yönetme
vcpkg geri bildirimi
vcpkg, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: