Skip to content

Guide to vcpkg

Vcpkg is package (library) manager for C++.

Useful commands

Get history of commits that modified versions in vcpkg

cd /path/to/vcpkg
git log "--format=%H %cd %s" --date=short --left-only -- versions/b-/boost-optional.json

Example output:

caa7579a1c48e2ca770f6ccf98cb03db95642631 2023-09-13 [boost] update to v1.83.0 (#33597)
5d3798ac7388ca66c169773e46103b14077b76a4 2023-06-06 [boost] Remove port version constraints (#31572)
501db0f17ef6df184fcdbfbe0f87cde2313b6ab1 2023-04-15 [boost-build] Fix SHA512 and add MSVC workaround. (#30884)
bedfdb774cfbe47da202169046ca15441a213f3e 2023-04-15 [Boost] Update Boost ports to 1.82#0 (#30856)
9484a57dd560b89f0a583be08af6753611c57fd5 2023-02-24 Update vcpkg-tool to 2023-02-16. (#29664)
6aa38234d08efefc55b70025cf6afc2212e78e15 2023-02-01 [boost] Fix generate ports to match the tree. (#29338)
6d41737729b170cb7d323a4fddd21607c9237636 2022-12-20 [boost] update to 1.81.0 (#28356)
5ba2b95aea2a39aa89444949c7a047af38c401c1 2022-10-18 [boost] Add version constraints (#26817)
8424da584e59e05956913bf96f87654aa3096c7e 2022-08-25 [boost] update to 1.80.0 (#26233)
96ec7fb25da25e0463446e552d59715a47c95e73 2022-04-21 [boost] update to 1.79.0 (#24210)
76d4836f3b1e027758044fdbdde91256b0f0955d 2022-01-10 [boost] update to 1.78.0 (#21928)
cc471dc0f59b7b2066d6172c2893419412327a7a 2021-09-27 [boost] update to 1.77.0 (#19556)
761c81d43335a5d5ccc2ec8ad90bd7e2cbba734e 2021-07-07 [boost] update to 1.76.0 (#17335)
68a74950d0400f5a803026d0860f49853984bf11 2021-01-21 [vcpkg] Rename `port_versions` to `versions` (#15784)

See versions in commit hash

git show 3426db05b996481ca31e95fff3734cf23e0f51bc:versions/baseline.json | egrep -A 3 -e '"zlib"|"curl"|"openssl"|"nlohmann-json"'

Minimum version required

See link

coollib ports/vcpkg.json

{
  "name": "coollib",
  "version": "2.0.0",
  "description": "COOL core library",
  "homepage": "https://gitlab.domain.com/libraries/coollib",
  "dependencies": [
    {
      "name" : "vcpkg-cmake",
      "host" : true
    },
    {
      "name" : "vcpkg-cmake-config",
      "host" : true
    },
    {
      "name": "zlib",
      "version>=": "1.2.11"
    },
    {
      "name": "openssl"
    },
    {
      "name": "curl",
      "version>=": "7.74.0"
    },
    {
      "name": "nlohmann-json",
      "version>=": "3.9.1"
    }
  ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}

Override default versions

{
  "name": "coollib",
  "version": "2.0.0",
  "description": "COOL core library",
  "homepage": "https://gitlab.domain.com/libraries/coollib",
  "dependencies": [
    {
      "name" : "vcpkg-cmake",
      "host" : true
    },
    {
      "name" : "vcpkg-cmake-config",
      "host" : true
    },
    {
      "name": "zlib",
      "version>=": "1.2.11"
    },
    {
      "name": "openssl"
    },
    {
      "name": "curl",
      "version>=": "7.74.0"
    },
    {
      "name": "nlohmann-json",
      "version>=": "3.9.1"
    }
  ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { 
        "name": "openssl", 
        "version-string": "1.1.1g"
    }
  ]
}

Create registry

mkdir ports
mkdir versions
{
  "default": {}
}
git add versions/baseline.json
git commit -m "Initial commit"
git remote add origin https://example.com/vcpkg-registry.git
git push --set-upstream origin HEAD

Package git package repo

vcpkg.json describes package metadata.

{
  "name": "coollib",
  "version-string": "2.0.0",
  "description": "COOL core library"
}

Format manifest:

vcpkg format-manifest ports/coollib/vcpkg.json

portfile.cmake describes how to build and install the package.

vcpkg_from_git(
    OUT_SOURCE_PATH SOURCE_PATH
    URL https://gitlab.domain.com/libraries/coollib
    REF 6fd574e6d5240ecf3e9d41f92e48604668607111
    SHA512 0
)

6fd574e6d5240ecf3e9d41f92e48604668607111 commit hash (corresponding tag version)

Test if installs:

vcpkg install coollib --overlay-ports=ports/coollib --debug