Öğretici: Komut satırından bağımlılık yükleme
Bahşiş
Bağımlılıklarınızı yükleme için önerilen yöntem için "Bildirim dosyasından bağımlılık yükleme" bakın.
Uyarı
Bazı vcpkg özellikleri klasik modda kullanılamaz.
vcpkg iki işlem moduna sahiptir: klasik mod ve bildirim modu. Bu makalede, klasik modu kullanarak paketlerin nasıl yükleneceği açıklanmaktadır. Çoğu kullanıcı için bunun yerine bildirim modunu kullanmanızı öneririz.
Klasik modda, bağımlılıklarınızı ortak biryükleme dizinine yüklemek için komut satırı arabirimi olarak vcpkg kullanırsınız. Genellikle %VCPKG_ROOT%/installed
konumunda bulunur ve burada %VCPKG_ROOT%
vcpkg'nin yükleme dizinidir.
Bu öğreticide şunları öğreneceksiniz:
- Proje oluşturma
- vcpkg'yi derleme sistemi ile tümleştirme
- Bağımlılıkları yükleme
- Projeyi oluştur
Önkoşullar
- vcpkg
- Bir terminal
- Kod düzenleyicisi
- C++ derleyicisi
- (İsteğe bağlı) CMake veya MSBuild
1 - Proje oluşturma
Yeni bir klasörde şu içeriklere sahip main.cxx
adlı 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, açık kaynak kitaplıklarına başvurur: cxxopts
, fmt
ve range-v3
; tümü vcpkg genel kayıt defterinde https://github.com/Microsoft/vcpkg'te mevcuttur.
2 - vcpkg'yi derleme sisteminizle tümleştirme
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 projelerinizdevcpkg kullanmak için aşağıdaki komutu çalıştırın:
vcpkg integrate install
MSBuild tümleştirmesini ilk kez etkinleştirmek istediğinizde yalnızca vcpkg integrate install
komutunu ç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 vcpkg integrate remove
kullanın.
Bu tümleştirme yöntemi, vcpkg yüklü paketleri otomatik olarak şu proje özelliklerine 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.
3 - Bağımlılıkları yükleme
Kod açık kaynak kitaplıklarına başvurur: cxxopts
, fmt
ve range-v3
; bunların tümü https://github.com/Microsoft/vcpkg'deki vcpkg genel kayıt defterinde kullanılabilir.
Bu paketleri yüklemek için vcpkg install
komutunu kullanın.
vcpkg install cxxopts fmt range-v3
$ ./vcpkg install cxxopts fmt range-v3
Computing installation plan...
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.
(omitted)
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)
4 - Projeyi oluşturma
Önemli
Yüklü paketlerinizin üçlü projenizin yapılandırmasıyla eşleştiğinden emin olun. 64 bit projeleriniz için x64-windows
veya x64-windows-static
, 32 bit projeleriniz için x86-windows
veya x86-windows-static
kullanın.
Sistem genelinde tümleştirme etkinleştirildiğinde projeyi oluşturmak için msbuild
çalıştırmanız gerekir:
PS D:\projects\manifest-example> msbuild
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/13/2023 3:07:36 PM.
Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
(omitted)
PrepareForBuild:
(omitted)
InitializeBuildStatus:
(omitted)
ComputeStdModulesCompileInputs:
(omitted)
SetModuleDependencies:
VcpkgTripletSelection:
Using triplet "x64-windows" from "D:\vcpkg\installed\x64-windows\"
Using normalized configuration "Debug"
ClCompile:
(omitted)
Link:
(omitted)
AppLocalFromInstalled:
pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manifest-example\x64\Debug\manifest-example.exe"
"D:\vcpkg\installed\x64-windows\debug\bin" "x64\Debug\manifest-example.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
Deleting file "x64\Debug\manifest-example.tlog\unsuccessfulbuild".
Touching "x64\Debug\manifest-example.tlog\manifest-example.lastbuildstate".
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.
Sonraki Adımlar
Bu öğreticide, komut satırı arabirimi olarak vcpkg kullanarak basit bir proje için bağımlılıkları yüklemişsinizdir.
Şimdi deneyebileceğiniz bazı ek görevler şunlardır:
- bildirim dosyası kullanarak paketleri yükleme
- üçlü kullanarak özel platformlar için paketleri yükleme
- sürümlemeyi kullanarak, derlemelerinizin tekrarlanabilir olması için sürümlerinizi kilitleyin
- İkili dosyaları sürekli tümleştirme çalıştırmaları arasında ikili önbelleğe alma kullanarak yeniden kullanma
- özel kayıt defterlerini kullanarak özel kitaplıklarınızı yönetme