CMake projelerinde vcpkg
vcpkg, yüklü paketleri projelerinizde otomatik olarak kullanılabilir hale getirmek için CMake ile sorunsuz tümleştirme sunar. vcpkg'nin tümleştirildiği mekanizma, bir CMake araç zinciri dosyası sağlamaktır.
CMake bir projeyi ilk kez yapılandırdığında, uygun bir araç zinciri (derleyici, bağlayıcı vb.) bulmak için iç arama yordamları çalıştırır. Bu arama, işlevinizin CMakeLists.txt
içinde project()
gerçekleşir.
CMake, araç zinciri seçim işlemini özelleştirmek için araç zinciri dosyaları olarak bilinen özel CMake dili betikleri kullanmayı destekler. Değişken ayarlanarak CMAKE_TOOLCHAIN_FILE
bir araç zinciri dosyası belirtilir. CMake, sağlanan araç zinciri betiğinin içeriğini değerlendirir ve değişken tanımlarını, gerekli derleme araçlarının yollarını ve çapraz derleme bayrakları gibi diğer derleme parametrelerini buna göre ayarlar.
vcpkg araç zincirini ()<vcpkg-root>/scripts/buildsystems/vcpkg.cmake
kullanacak şekilde ayarladığınızdaCMAKE_TOOLCHAIN_FILE
, vcpkg yerleşik CMake işlevleriyle saydam bir şekilde tümleştirmek üzere kod eklemek için araç zinciri dosya mekanizmasından yararlanır.
Üçlü değişkenini kullanarak VCPKG_CHAINLOAD_TOOLCHAIN_FILE
kendi araç kümelerinizi yapılandırmak için yine de bir araç zinciri dosyası kullanabilirsiniz.
vcpkg tümleştirmesi, kullandığınız işlem moduna bağlı olarak farklı çalışır:
Klasik modda vcpkg, yüklü paketlerin , find_library()
ve find_path()
işlevleri aracılığıyla find_package()
kullanılabilir olmasını sağlamak için CMake arama yollarını uygun şekilde ayarlar.
Bildirim modunda, yukarıdakilere ek olarak, araç zinciri bildirim dosyalarını (vcpkg.json
dosyaları) algılar ve projenin bağımlılıklarını otomatik olarak almak için çalışırvcpkg install
.
Araç zinciri dosyası çağrı sırasında project()
değerlendirildiğinden, vcpkg ayarını değiştiren tüm CMake düzeyindeki değişkenlerin ilk çağrısından project()
önce ayarlanması gerekir. ABI karma değişikliklerine neden olan herhangi bir vcpkg ayarını değiştirirseniz CMake projenizi yeniden yapılandırmanız da gerekebilir.
CMake kullanarak tam olarak çalışan bir örnek için bkz . Paketleri Yükleme ve Kullanma Örneği: sqlite .
CMAKE_TOOLCHAIN_FILE
Not
Dosyanızda CMakeList.txt
ayarlarsanızCMAKE_TOOLCHAIN_FILE
, değişkeninin çağrısından project()
önce ayarlandığından emin olun.
vcpkg araç zinciri dosyasını kullanacak şekilde yapılandırılmış projeler (CMake ayarı CMAKE_TOOLCHAIN_FILE
aracılığıyla) standart CMake işlevlerini kullanarak vcpkg'den kitaplıkları bulabilir: find_package()
, find_path()
ve find_library()
.
Araç zinciri dosyanızı belirtmek için CMake Önayarları'nı kullanmanızı öneririz. Örneğin, ortam değişkenini VCPKG_ROOT
tanımladıysanız aşağıdakileri CMakePresets.json
kullanabilir ve yapılandırma satırını geçirebilirsiniz --preset debug
:
{
"version": 2,
"configurePresets": [
{
"name": "debug",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}
}
]
}
cmake -B build -S /my/project --preset debug
Geçerli makinenize özgü vcpkg için mutlak bir yol kullanmanız gerekiyorsa, bunu kullanabilir CMakeUserPresets.json
ve dosyanıza .gitignore
ekleyebilirsiniz.
{
"version": 2,
"configurePresets": [
{
"name": "debug",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}
}
]
}
3.19'dan eski CMake sürümleri, yapılandırma komut satırında araç zinciri dosyasını geçirmelidir:
cmake ../my/project -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake
Kitaplıkları Kullanma
vcpkg, CMake'nin kitaplıkları bulmak için yerel mekanizmalarını destekler: find_package()
, find_library()
ve find_path()
. Belirli CMake desteğine sahip kitaplıkları yüklerken, vcpkg kitaplığın nasıl kullanılacağına ilişkin kullanım bilgilerini görüntüler:
The package zlib is compatible with built-in CMake targets:
find_package(ZLIB REQUIRED)
target_link_libraries(main PRIVATE ZLIB::ZLIB)
vcpkg projenize otomatik olarak herhangi bir ekleme veya bağlantı yolu eklemez. Yalnızca üst bilgi kitaplığı kullanmak için, tüm platformlarda doğru şekilde çalışacak bir kitaplık kullanabilirsiniz find_path()
:
# To find and use catch2
find_path(CATCH_INCLUDE_DIR NAMES catch.hpp PATH_SUFFIXES catch2)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})
IDE Tümleştirme
Visual Studio / Visual Studio Code
Hem Visual Studio'da hem de Visual Studio Code'da CMake Önayarları kullanmanızı öneririz.
Daha fazla bilgi için bkz. Visual Studio'da CMake Ön Ayarları ile yapılandırma ve derleme ve Visual Studio Code'da CMake Ön Ayarları ile yapılandırma ve derleme.
CLion
Araç Zinciri ayarlarını açın (File > Settings
Windows ve Linux'ta, CLion > Preferences
macOS'ta) ve CMake ayarlarına (Build, Execution, Deployment > CMake
) gidin. içine CMake options
aşağıdaki satırı ekleyin:
-DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake
Bu satırı her profile ayrı ayrı eklemeniz gerekir.
Birden Çok Araç Zinciri Dosyası Kullanma
vcpkg'nin araç zinciri dosyasını başka bir araç zinciri dosyasıyla birleştirmek için CMake önbellek değişkenini VCPKG_CHAINLOAD_TOOLCHAIN_FILE
ayarlayabilirsiniz:
cmake ../my/project \
-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=../my/project/toolchain.cmake
Alternatif olarak, vcpkg araç zincirini birincil araç zinciri dosyasının sonuna ekleyebilirsiniz:
# MyToolchain.cmake
set(CMAKE_CXX_COMPILER ...)
set(VCPKG_TARGET_TRIPLET x64-my-custom-windows-triplet)
include(/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake)
Not
vcpkg, kitaplık oluştururken derleyiciniz veya derleme bayraklarınız gibi araç zincirinizin ayarlarını otomatik olarak uygulamaz. vcpkg'nin kitaplık ayarlarını değiştirmek için özel bir üçlü dosya oluşturmanız gerekir ( araç zincirinizi paylaşabilir)**
Ayarlar Başvurusu
Vcpkg'yi etkileyen tüm değişkenler, komut satırı veya set()
deyimler aracılığıyla bir CMakePresets.json
's "cacheVariables"
eşlemesi gibi ilk project()
yönergeden önce tanımlanmalıdır.
VCPKG_TARGET_TRIPLET
Bu ayar, üçlü vcpkg'nin kitaplıkları yükleyip tüketeceğini denetler.
Ayar kaldırılırsa, vcpkg geçerli derleyici ayarlarına göre uygun varsayılan üçlüleri otomatik olarak algılar. Bu CMake değişkenini değiştirirseniz önbelleğinizi silip yeniden yapılandırmanız gerekir.
VCPKG_HOST_TRIPLET
Bu değişken, hangi üçlü konak bağımlılıklarının yükleneceğini denetler.
Ayar kaldırıldığında, vcpkg otomatik olarak uygun bir yerel üçlü (x64-windows, x64-osx, x64-linux) algılar.
Ayrıca bkz. Konak bağımlılıkları.
VCPKG_INSTALLED_DIR
Bu değişken, kitaplıkların yükleneceği ve kullanıldığı konumu ayarlar.
Bildirim modunda varsayılan değerdir ${CMAKE_BINARY_DIR}/vcpkg_installed
.
Klasik modda varsayılan değerdir ${VCPKG_ROOT}/installed
.
VCPKG_MANIFEST_MODE
Bu değişken vcpkg'yi bildirim modunda veya klasik modda çalışmaya zorlar.
Varsayılan olarak ON
ne zaman VCPKG_MANIFEST_DIR
boş değilse veya ${CMAKE_SOURCE_DIR}/vcpkg.json
mevcutsa olarak ayarlanır.
algılanırken vcpkg.json
bildirim modunu devre dışı bırakmak için bunu olarak OFF
ayarlayın.
VCPKG_MANIFEST_DIR
Bu değişken, bildirim içeren alternatif bir vcpkg.json
klasör belirtir.
Varsa varsayılan ${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/vcpkg.json
değeridir.
VCPKG_MANIFEST_INSTALL
Bu değişken, yapılandırma adımınız sırasında bağımlılıklarınızı yüklemek için vcpkg'nin otomatik olarak çalıştırılıp çalıştırılmayacağını denetler.
Varsayılan olarak ON
ise VCPKG_MANIFEST_MODE
olur ON
.
VCPKG_BOOTSTRAP_OPTIONS
Bu değişken, öğesine geçirilecek ek komut parametrelerine ./bootstrap-vcpkg
ayarlanabilir.
Bildirim modunda yürütülebilir dosya yoksa vcpkg otomatik olarak önyüklenir.
VCPKG_OVERLAY_TRIPLETS
Bu değişken, komut satırında geçirilecek yolların listesi olarak ayarlanabilir --overlay-triplets=...
VCPKG_OVERLAY_PORTS
Bu değişken, komut satırında geçirilecek yolların listesi olarak ayarlanabilir --overlay-ports=...
VCPKG_MANIFEST_FEATURES
Bu değişken, bildiriminizden yüklenirken etkinleştirilecek özellikler listesine ayarlanabilir.
Örneğin, testler veya örnekleri etkinleştirmek üzere ek bağımlılıklarla derlemeyi denetlemek için projeler tarafından özellikler kullanılabilir:
{
"name": "mylibrary",
"version": "1.0",
"dependencies": [ "curl" ],
"features": {
"samples": {
"description": "Build Samples",
"dependencies": [ "fltk" ]
},
"tests": {
"description": "Build Tests",
"dependencies": [ "gtest" ]
}
}
}
Bu ayar, CMake Ön Ayarları tarafından doğrudan diğer ayarlarla "cacheVariables"
veya dolaylı olarak denetlenebilir:
# CMakeLists.txt
option(BUILD_TESTING "Build tests" OFF)
if(BUILD_TESTING)
list(APPEND VCPKG_MANIFEST_FEATURES "tests")
endif()
option(BUILD_SAMPLES "Build samples" OFF)
if(BUILD_SAMPLES)
list(APPEND VCPKG_MANIFEST_FEATURES "samples")
endif()
project(myapp)
# ...
VCPKG_MANIFEST_NO_DEFAULT_FEATURES
Bu değişken, içinde VCPKG_MANIFEST_FEATURES
listelenenlere ek olarak varsayılan özelliklerin etkinleştirilmesini denetler. olarak ayarlanırsa ON
, varsayılan özellikler otomatik olarak etkinleştirilmez.
varsayılan değeridir OFF
.
VCPKG_INSTALL_OPTIONS
Bu değişken, otomatik yükleme sırasında vcpkg aracına geçirilecek ek komut satırı parametreleri listesine ayarlanabilir.
VCPKG_PREFER_SYSTEM_LIBS
Uyarı
Bu özellik kullanım dışı bırakıldı. Bunun yerine boş katman bağlantı noktalarını kullanın.
Bu değişken, vcpkg'nin yoluna CMAKE_PREFIX_PATH
CMAKE_LIBRARY_PATH
önceden eklemek yerine eklenip eklenmeyeceğini denetler ve CMAKE_FIND_ROOT_PATH
böylece vcpkg kitaplıkları/paketleri araç zinciri/sistem kitaplıkları/paketlerinden sonra bulunur.
varsayılan değeridir OFF
.
VCPKG_FEATURE_FLAGS
Bu değişken, deneysel davranışı kabul etmek için otomatik yükleme sırasında vcpkg aracına geçirilecek özellik bayrakları listesine ayarlanabilir.
--feature-flags=
Daha fazla bilgi için komut satırı seçeneğine bakın.
VCPKG_TRACE_FIND_PACKAGE
olarak ayarlandığında ON
, her çağrıyı olarak find_package
yazdırın. İç içe çağrılar (örneğin aracılığıyla find_dependency
) iç içe yerleştirme derinliğine göre girintilenir.