Paketleri Yükleme ve Kullanma Örneği: SQLite

Not

Bu eski örnek Klasik modu kullanır, ancak çoğu geliştirici Bildirim moduyla daha mutlu olacaktır. Bildirim moduna dönüştürme örneği için bkz . Bildirim modu: CMake Örneği .

1. Adım: Yükleme

İlk olarak, bağlantı noktaları ağacında SQLite adının ne olduğunu bilmemiz gerekir. Bunu yapmak için komutunu çalıştıracak search ve çıkışı inceleyeceğiz:

PS D:\src\vcpkg> .\vcpkg search sqlite
libodb-sqlite        2.4.0            Sqlite support for the ODB ORM library
sqlite3              3.32.1           SQLite is a software library that implements a se...

If your library is not listed, please open an issue at:
    https://github.com/Microsoft/vcpkg/issues

Listeye baktığımızda bağlantı noktasının "sqlite3" olarak adlandırıldığını görebiliriz. Paketlerin search tam listesini görmek için komutunu bağımsız değişkenler olmadan da çalıştırabilirsiniz.

Bu durumda yüklemek, komutunu kullanmak install kadar basittir.

PS D:\src\vcpkg> .\vcpkg install sqlite3
Computing installation plan...
The following packages will be built and installed:
    sqlite3[core]:x86-windows
Starting package 1/1: sqlite3:x86-windows
Building package sqlite3[core]:x86-windows...
-- Downloading https://sqlite.org/2020/sqlite-amalgamation-3320100.zip...
-- Extracting source C:/src/vcpkg/downloads/sqlite-amalgamation-3320100.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at C:/src/vcpkg/buildtrees/sqlite3/src/3320100-15aeda126a.clean
-- Configuring x86-windows
-- Building x86-windows-dbg
-- Building x86-windows-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x86-windows... done
Installing package sqlite3[core]:x86-windows...
Installing package sqlite3[core]:x86-windows... done
Elapsed time for package sqlite3:x86-windows: 12 s

Total elapsed time: 12.04 s

The package sqlite3:x86-windows provides CMake targets:

    find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3))

komutunu çalıştırarak list x86 Windows masaüstü için sqlite3'in başarıyla yüklenip yüklenmediğini denetleyebiliriz.

PS D:\src\vcpkg> .\vcpkg list
sqlite3:x86-windows         3.32.1           SQLite is a software library that implements a se...

Evrensel Windows Platformu veya x64 Desktop gibi diğer mimariler ve platformlar için yüklemek için paket adını ile :<target>sonekleyebilirsiniz.

PS D:\src\vcpkg> .\vcpkg install sqlite3:x86-uwp zlib:x64-windows

Desteklenen tüm hedefler için bkz .\vcpkg help triplet .

2. Adım: Kullanma

VS/MSBuild Projesi (Kullanıcı genelinde tümleştirme)

vcpkg kullanmanın önerilen ve en üretken yolu, kullanıcı genelinde tümleştirme yoluyla sistemi oluşturduğunuz tüm projeler için kullanılabilir hale getirmektir. Kullanıcı genelinde tümleştirme, belirli bir makinede ilk kez kullanıldığında yönetici erişimi ister, ancak daha sonra artık gerekli değildir ve tümleştirme kullanıcı başına yapılandırılır.

PS D:\src\vcpkg> .\vcpkg integrate install
Applied user-wide integration for this vcpkg root.

All C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

Not

IntelliSense'i değişikliklerle güncelleştirmek için Visual Studio'yu yeniden başlatmanız veya Derleme gerçekleştirmeniz gerekir.

Artık Visual Studio'da Dosya -> Yeni Proje'yi kullanabilirsiniz ve kitaplık otomatik olarak kullanılabilir. SQLite için C/C++ örneğini deneyebilirsiniz.

Kullanıcınızın tümleştirmesini kaldırmak için kullanabilirsiniz .\vcpkg integrate remove.

CMake (Araç Zinciri Dosyası)

Yüklü kitaplıkları cmake ile kullanmanın en iyi yolu araç zinciri dosyası scripts\buildsystems\vcpkg.cmakeüzerindendir. Bu dosyayı kullanmak için CMake komut satırınıza şu şekilde eklemeniz yeterlidir:

-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake.

Visual Studio ile Klasör Aç aracılığıyla CMake kullanıyorsanız, yapılandırmalarınızın her birine bir "değişkenler" bölümü ekleyerek tanımlayabilirsiniz CMAKE_TOOLCHAIN_FILE CMakeSettings.json :

{
  "configurations": [{
    "name": "x86-Debug",
    "generator": "Visual Studio 15 2017",
    "configurationType" : "Debug",
    "buildRoot":  "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}",
    "cmakeCommandArgs": "",
    "buildCommandArgs": "-m -v:minimal",
    "variables": [{
      "name": "CMAKE_TOOLCHAIN_FILE",
      "value": "D:\\src\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
    }]
  }]
}

Not

Tam bir yeniden oluşturmayı zorlamak için değiştirilen her yapılandırmanın CMake önbellek klasörünü silmek gerekebilir. CMake menüsünde, altında Cache (<configuration name>) öğesini bulursunuzDelete Cache Folders.

Şimdi bir ana dosya ile basit bir CMake projesi yapalım.

# CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(test)

find_package(unofficial-sqlite3 CONFIG REQUIRED)

add_executable(main main.cpp)

target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)
// main.cpp
#include <sqlite3.h>
#include <stdio.h>

int main()
{
    printf("%s\n", sqlite3_libversion());
    return 0;
}

Ardından projemizi normal CMake biçiminde derleyeceğiz:

PS D:\src\cmake-test> mkdir build 
PS D:\src\cmake-test> cd build
PS D:\src\cmake-test\build> cmake .. "-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake"
    // omitted CMake output here //
-- Build files have been written to: D:/src/cmake-test/build
PS D:\src\cmake-test\build> cmake --build .
    // omitted MSBuild output here //
Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:02.38
PS D:\src\cmake-test\build> .\Debug\main.exe
3.15.0

Not

x86-windows için oluşturulurken doğru sqlite3.dll otomatik olarak çıkış klasörüne kopyalanır. Bunu uygulamanızla birlikte dağıtmanız gerekir.

Yerel cmake desteği olmadan kitaplıkları işleme

Diğer platformların aksine, dizini varsayılan olarak derleme satırınıza otomatik olarak eklemeyiz include\ . CMake tümleştirmesi sağlamayan bir kitaplık kullanıyorsanız, dosyaları açıkça aramanız ve ve find_library()kullanarak find_path() kendiniz eklemeniz gerekir.

# To find and use catch
find_path(CATCH_INCLUDE_DIR catch.hpp)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})

# To find and use azure-storage-cpp
find_path(WASTORAGE_INCLUDE_DIR was/blob.h)
find_library(WASTORAGE_LIBRARY wastorage)
target_include_directories(main PRIVATE ${WASTORAGE_INCLUDE_DIR})
target_link_libraries(main PRIVATE ${WASTORAGE_LIBRARY})