vcpkg offre un'integrazione perfetta con CMake per rendere i pacchetti installati disponibili automaticamente nei progetti. Il meccanismo in cui vcpkg si integra consiste nel fornire un file toolchain CMake.
La prima volta che CMake configura un progetto, esegue routine di ricerca interne per individuare una toolchain praticabile (compilatore, linker e così via). Questa ricerca viene eseguita all'interno della funzione nell'oggetto project()CMakeLists.txt.
Per personalizzare il processo di selezione della toolchain, CMake supporta l'uso di script personalizzati del linguaggio CMake, noti come file toolchain. Un file toolchain viene specificato impostando la CMAKE_TOOLCHAIN_FILE variabile. CMake valuta il contenuto dello script toolchain fornito e imposta le definizioni delle variabili, i percorsi degli strumenti di compilazione necessari e altri parametri di compilazione, ad esempio flag di compilazione incrociata, di conseguenza.
Quando si imposta CMAKE_TOOLCHAIN_FILE per usare la toolchain vcpkg (<vcpkg-root>/scripts/buildsystems/vcpkg.cmake), vcpkg sfrutta il meccanismo di file toolchain per inserire il codice da integrare con le funzioni CMake predefinite in modo trasparente.
È comunque possibile usare un file toolchain per configurare set di strumenti personalizzati usando la VCPKG_CHAINLOAD_TOOLCHAIN_FILE variabile triplet.
L'integrazione di vcpkg funziona in modo diverso a seconda della modalità operativa in uso:
In modalità classica vcpkg imposta i percorsi di ricerca di CMake in modo appropriato per rendere i pacchetti installati disponibili tramite le find_package()funzioni , find_library()e find_path() .
In modalità manifesto, oltre a quanto sopra, la toolchain rileva i file manifesto (vcpkg.json file) ed esegue vcpkg install per acquisire automaticamente le dipendenze del progetto.
Poiché il file toolchain viene valutato durante la project() chiamata, tutte le variabili a livello di CMake che modificano un'impostazione vcpkg devono essere impostate prima della prima chiamata a project(). Potrebbe anche essere necessario riconfigurare il progetto CMake se si modifica un'impostazione vcpkg che comporta modifiche all'hash ABI.
Se si imposta CMAKE_TOOLCHAIN_FILE nel CMakeList.txt file, assicurarsi che la variabile sia impostata prima di qualsiasi chiamata a project().
I progetti configurati per l'uso del file toolchain vcpkg (tramite l'impostazione CMAKE_TOOLCHAIN_FILECMake ) possono trovare librerie da vcpkg usando le funzioni CMake standard: find_package(), find_path()e find_library().
È consigliabile usare i set di impostazioni di CMake per specificare il file toolchain. Ad esempio, se è stata definita la variabile VCPKG_ROOTdi ambiente , è possibile usare quanto segue CMakePresets.json e passare --preset debug la riga di configurazione:
Se è necessario usare un percorso assoluto per vcpkg specifico del computer corrente, è possibile usarlo CMakeUserPresets.json e aggiungerlo al .gitignore file.
vcpkg supporta i meccanismi nativi di CMake per la ricerca di librerie: find_package(), find_library()e find_path(). Quando si installano librerie con supporto CMake specifico, vcpkg visualizzerà informazioni sull'utilizzo su come usare la libreria:
The package zlib is compatible with built-in CMake targets:
find_package(ZLIB REQUIRED)
target_link_libraries(main PRIVATE ZLIB::ZLIB)
vcpkg non aggiunge automaticamente percorsi di inclusione o collegamenti al progetto. Per usare una libreria di sola intestazione, è possibile usare find_path() che funzionerà correttamente in tutte le piattaforme:
cmake
# To find and use catch2find_path(CATCH_INCLUDE_DIR NAMES catch.hpp PATH_SUFFIXES catch2)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})
Integrazione nell'IDE
Visual Studio/Visual Studio Code
È consigliabile usare i set di impostazioni di CMake sia in Visual Studio che in Visual Studio Code.
Aprire le impostazioni delle toolchain (File > Settings in Windows e Linux in CLion > Preferences macOS) e passare alle impostazioni di CMake (Build, Execution, Deployment > CMake). In CMake optionsaggiungere la riga seguente:
vcpkg non applica automaticamente le impostazioni della toolchain, ad esempio il compilatore o i flag di compilazione, durante la compilazione di librerie. Per modificare le impostazioni della libreria di vcpkg, è necessario creare un file tripletta personalizzato (che può condividere la toolchain)**
Informazioni di riferimento sulle impostazioni
Tutte le variabili che influiscono su vcpkg devono essere definite prima della prima project() direttiva, ad esempio nella mappa di un CMakePresets.jsonoggetto , tramite la riga di "cacheVariables" comando o set() le istruzioni .
VCPKG_TARGET_TRIPLET
Questa impostazione controlla che il vcpkg triplo installerà e utilizzerà le librerie da.
Se non è impostato, vcpkg rileverà automaticamente un triplo predefinito appropriato in base alle impostazioni correnti del compilatore. Se si modifica questa variabile CMake, è necessario eliminare la cache e riconfigurarsi.
Questa impostazione può essere controllata direttamente dai set di impostazioni di CMake con "cacheVariables" o indirettamente in base ad altre impostazioni:
Questa variabile controlla l'attivazione delle funzionalità predefinite oltre a quelle elencate in VCPKG_MANIFEST_FEATURES. Se impostato su ON, le funzionalità predefinite non verranno attivate automaticamente.
Il valore predefinito è OFF.
VCPKG_INSTALL_OPTIONS
Questa variabile può essere impostata su un elenco di parametri della riga di comando aggiuntivi da passare allo strumento vcpkg durante l'installazione automatica.
VCPKG_PREFER_SYSTEM_LIBS
Avviso
Questa funzionalità è stata deprecata. Usare invece porte sovrapposte vuote.
Questa variabile controlla se vcpkg aggiungerà invece di anteporre i relativi percorsi a CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATH e CMAKE_FIND_ROOT_PATH in modo che le librerie/i pacchetti vcpkg vengano trovate dopo toolchain/librerie di sistema/pacchetti.
Il valore predefinito è OFF.
VCPKG_FEATURE_FLAGS
Questa variabile può essere impostata su un elenco di flag di funzionalità da passare allo strumento vcpkg durante l'installazione automatica per acconsentire esplicitamente al comportamento sperimentale.
Per altre informazioni, vedere l'opzione della --feature-flags= riga di comando.
VCPKG_TRACE_FIND_PACKAGE
Se impostato su ON, stampare ogni chiamata a find_package. Le chiamate annidate (ad esempio tramite find_dependency) vengono rientrate in base alla profondità di annidamento.
Collabora con noi su GitHub
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su vcpkg
vcpkg è un progetto di open source. Selezionare un collegamento per fornire feedback:
Azure HPC è una funzionalità cloud appositamente realizzata per carichi di lavoro HPC e di intelligenza artificiale che si avvale di processori all'avanguardia e dell'interconnessione InfiniBand di classe HPC per offrire livelli ottimali di prestazioni, scalabilità e valore delle applicazioni. Azure HPC consente agli utenti di favorire l'innovazione, la produttività e l'agilità aziendale tramite una gamma a disponibilità elevata di tecnologie di intelligenza artificiale che possono essere allocate dinamicam