Udostępnij za pośrednictwem


Przykład instalowania i używania pakietów: SQLite

Uwaga

W tym starym przykładzie jest używany tryb klasyczny, ale większość deweloperów będzie szczęśliwsza z trybem manifestu. Zobacz Tryb manifestu: Przykład narzędzia CMake, aby zapoznać się z przykładem konwertowania na tryb manifestu.

Krok 1. Instalowanie

Najpierw musimy wiedzieć, jaka nazwa jest używana przez sqlite w drzewie portów. W tym celu uruchomimy search polecenie i sprawdzimy dane wyjściowe:

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

Patrząc na listę, widzimy, że port nosi nazwę "sqlite3". Możesz również uruchomić search polecenie bez argumentów, aby wyświetlić pełną listę pakietów.

Instalowanie jest wtedy tak proste, jak za pomocą install polecenia .

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))

Możemy sprawdzić, czy program sqlite3 został pomyślnie zainstalowany dla komputera z systemem Windows x86, uruchamiając list polecenie .

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

Aby zainstalować dla innych architektur i platform, takich jak platforma uniwersalna systemu Windows lub x64 Desktop, możesz sufiksować nazwę pakietu za pomocą :<target>polecenia .

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

Zobacz, aby zapoznać się .\vcpkg help triplet ze wszystkimi obsługiwanymi miejscami docelowymi.

Krok 2. Użycie

VS/MSBuild Project (integracja w całym użytkowniku)

Zalecanym i najbardziej wydajnym sposobem korzystania z narzędzia vcpkg jest integracja w całym użytkowniku, dzięki czemu system jest dostępny dla wszystkich projektów, które tworzysz. Integracja w całym użytkowniku wyświetli monit o dostęp administratora przy pierwszym użyciu na danej maszynie, ale później nie jest już wymagana, a integracja jest skonfigurowana na podstawie poszczególnych użytkowników.

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.

Uwaga

Konieczne będzie ponowne uruchomienie programu Visual Studio lub wykonanie kompilacji w celu zaktualizowania funkcji IntelliSense przy użyciu zmian.

Teraz możesz po prostu użyć opcji Plik —> nowy projekt w programie Visual Studio, a biblioteka będzie automatycznie dostępna. W przypadku biblioteki SQLite możesz wypróbować przykład C/C++.

Aby usunąć integrację dla użytkownika, możesz użyć polecenia .\vcpkg integrate remove.

CMake (plik łańcucha narzędzi)

Najlepszym sposobem korzystania z zainstalowanych bibliotek za pomocą narzędzia cmake jest użycie pliku scripts\buildsystems\vcpkg.cmakełańcucha narzędzi . Aby użyć tego pliku, wystarczy dodać go do wiersza polecenia narzędzia CMake jako:

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

Jeśli używasz narzędzia CMake za pomocą funkcji Otwórz folder w programie Visual Studio, możesz zdefiniować CMAKE_TOOLCHAIN_FILE , dodając sekcję "zmienne" do każdej CMakeSettings.json konfiguracji:

{
  "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"
    }]
  }]
}

Uwaga

Może być konieczne usunięcie folderu pamięci podręcznej CMake każdej zmodyfikowanej konfiguracji, aby wymusić pełną rewitalizę. CMake W menu Cache (<configuration name>) znajdziesz pozycję Delete Cache Folders.

Teraz utwórzmy prosty projekt CMake z głównym plikiem.

# 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;
}

Następnie tworzymy nasz projekt w normalny sposób CMake:

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

Uwaga

Poprawny sqlite3.dll jest automatycznie kopiowany do folderu wyjściowego podczas kompilowania dla systemu x86-windows. Należy rozproszyć tę aplikację wraz z aplikacją.

Obsługa bibliotek bez natywnej obsługi narzędzia cmake

W przeciwieństwie do innych platform domyślnie nie dodajemy include\ katalogu do wiersza kompilacji. Jeśli używasz biblioteki, która nie zapewnia integracji narzędzia CMake, musisz jawnie wyszukać pliki i dodać je samodzielnie przy użyciu narzędzi find_path() i find_library().

# 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})