Aracılığıyla paylaş


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.txtiç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.jsondosyaları) 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_FILEaracı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_ROOTtanı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 optionsaş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_FILEayarlayabilirsiniz:

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 OFFayarlayı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-vcpkgayarlanabilir.

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_FEATURESlistelenenlere 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_PATHCMAKE_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_packageyazdırın. İç içe çağrılar (örneğin aracılığıyla find_dependency) iç içe yerleştirme derinliğine göre girintilenir.