What’s New in vcpkg (April 2024)
This blog post summarizes changes to the vcpkg package manager as part of the 2024.04.26 release as well as changes to vcpkg documentation throughout April. This month’s vcpkg release includes improvements for visually generated dependency graphs, a new triplet variable for tweaking what files are considered by the ABI hashing algorithm, several changes to our documentation, and some performance and bug fixes.
Some stats for this period:
- There are now 2,426 total ports available in the vcpkg public registry. A port is a versioned recipe for building a package from source, such as a C or C++ library.
- 12 new ports were added to the open-source registry.
- 279 updates were made to existing ports. As always, we validate each change to a port by building all other ports that depend on or are depended by the library that is being updated for our 13 main triplets.
- 16 contributors submitted PRs, issues, or participated in discussions in the main repo.
- The main vcpkg repo has over 6,000 forks and 21,700 stars on GitHub.
An overview of vcpkg in 10 minutes
For the Pure Virtual C++ conference this year, I gave an overview of vcpkg in just under 10 minutes. You can check out the video below:
vcpkg changelog (2024.04.26 release)
The following changes were made in the April release:
vcpkg depend-info improvements
The vcpkg depend-info command displays dependencies for a set of port packages in one of multiple possible visual forms. Several improvements were made to this feature by our community contributor @dg0yt.
Multi-package, triplet, and features support
Added support for displaying multiple packages, including triplets and optional features (documentation). Examples:
$ vcpkg depend-info zlib
vcpkg-cmake:
zlib: vcpkg-cmake
$ vcpkg depend-info zlib:arm64-linux
vcpkg-cmake:
zlib:arm64-linux: vcpkg-cmake
$ vcpkg depend-info zlib:arm64-linux zlib --triplet x64-linux --host-triplet x64-linux-dynamic
vcpkg-cmake:host:
zlib:arm64-linux: vcpkg-cmake:host
zlib: vcpkg-cmake:host
Improved readability for depend-info –dot
Improved readability for depend-info –dot output with added line breaks and a change to the “Sans” font. Example:
$ vcpkg depend-info --dot ableton-link
digraph G{ rankdir=LR; node [fontname=Sans]; edge [minlen=3]; overlap=false;
"ableton";
"ableton" -> "ableton-link";
"ableton-link";
"ableton-link" -> "asio";
"ableton-link" -> "vcpkg-cmake";
"ableton-link" -> "vcpkg-cmake-config";
"asio";
"asio" -> "vcpkg-cmake";
"asio" -> "vcpkg-cmake-config";
"vcpkg-cmake";
"vcpkg-cmake-config";
"2 singletons...";
}
Colorization by triplet type
Multi-triplet graphs generated with the “dot” format are now colorized based on whether they are a default triplet, custom triplet, or host triplet. Example:
$ vcpkg depend-info proj:arm64-linux proj tiff[core] –triplet x64-linux-dynamic –dot | dot -Tpng -oimg.png && xdg-open img.png
PRs: Microsoft/vcpkg-tool#1369, Microsoft/vcpkg-tool#1370, Microsoft/vcpkg-tool#1371, thanks @dg0yt!
New triplet variable: VCPKG_HASH_ADDITIONAL_FILES
Added variable VCPKG_HASH_ADDITIONAL_FILES
for use in triplet files (documentation). This allows you to provide a list of files to include in the calculation of package ABI hashes, giving you more fine-tuned control over the binary caching experience (PR: Microsoft/vcpkg-tool#797, thanks @Neumann-A!).
Bug fixes and performance improvements
- Fixed a performance regression where library information was being read twice and removed an unnecessary architecture check (PR: Microsoft/vcpkg-tool#1352, thanks @Thomas1664!).
- Fixed a bug with default features sometimes getting applied when they were explicitly disabled in the top-level manifest (Originally reported issue: Microsoft/vcpkg/issues#35694. PR with fix: Microsoft/vcpkg-tool#1331, thanks @dg0yt!).
Documentation changes
- Moved Glossary to a top-level node in the table of contents and added several new terms. The Glossary defines vcpkg-specific terms.
- Added an example helper port in the Authoring script ports article to help clarify how it works.
- Added a warning in multiple places in the documentation that when environment variables are set via a command, they will only apply to the current terminal session, not future sessions.
- Added a CMake FetchContent section to the build failures troubleshooting guide. This addresses issues where FetchContent dependencies aren’t found during a build.
- Added clarification about how toolset versions are matched to the triplets reference article (thanks @tsondergaard!).
- Fixed some broken URLs.
- Fixed various typos (thanks @xPaw, @alex-held, @fedorbirjukov!).
If you have any suggestions for our documentation, please submit an issue in our GitHub repo or see the box at the bottom of a particular article.
Total ports available for tested triplets
triplet | ports available |
x64-windows | 2,281 |
x86-windows | 2,195 |
x64-windows-static | 2,176 |
x64-windows-static-md | 2,203 |
arm64-windows | 1,862 |
x64-uwp | 1,270 |
arm64-uwp | 1,235 |
x64-linux | 2,249 |
x64-osx | 2,138 |
arm64-osx | 2,061 |
arm-neon-android | 1,566 |
x64-android | 1,618 |
arm64-android | 1,592 |
While vcpkg supports a much larger variety of target platforms and architectures (as community triplets), the list above is validated exhaustively to ensure updated ports don’t break other ports in the catalog.
Thank you to our contributors
vcpkg couldn’t be where it is today without contributions from our open-source community. Thank you for your continued support! The following people contributed to the vcpkg, vcpkg-tool, or vcpkg-docs repos in this release:
- dg0yt (27 commits)
- jiayuehua (16 commits)
- Neumann-A (8 commits)
- miyanyan (5 commits)
- talregev (5 commits)
- waywardmonkeys (3 commits)
- RT2Code (3 commits)
- Thomas1664 (3 commits)
- autoantwort (3 commits)
- AenBleidd (2 commits)
- xPaw (2 commits)
- HappySeaFox (1 commit)
- Honeybunch (1 commit)
- alagoutte (1 commit)
- Tradias (1 commit)
- Pospelove (1 commit)
- traversaro (1 commit)
- luncliff (1 commit)
- cenit (1 commit)
- TrueBrain (1 commit)
- fwcd (1 commit)
- SchaichAlonso (1 commit)
- JackBoosY (1 commit)
- alex-held (1 commit)
- fedorbirjukov (1 commit)
- tsondergaard (1 commit)
Learn more
You can find the full 2024.04.26 release notes on GitHub for the main repo. Recent updates to the vcpkg tool can be viewed on the vcpkg-tool Releases page. To contribute to vcpkg documentation, visit the vcpkg-docs repo. If you’re new to vcpkg or curious about how a package manager can make your life easier as a C/C++ developer, check out the vcpkg website – vcpkg.io.
If you would like to contribute to vcpkg and its library catalog, or want to give us feedback on anything, check out our GitHub repo. Please report bugs or request updates to ports in our issue tracker or join more general discussion in our discussion forum.
0 comments